Você está na página 1de 70

Curso de

Cobol
On-Line

Curso de Programao Cobol - Online


Introduo
Atualmente, torna-se necessrio para uma rpida performance de uma empresa, a
disponibilidade de demonstrar informaes atuais e precisas. A utilizao de papel (Relatrios)
vem sendo aos poucos substituda pelo processo de consulta em Tela (On-line), onde o usurio
obtm acesso s informaes da empresa.
O IMS (Imediate Message Service), um Ambiente (aplicativo) desenvolvido para o
teleprocessamento. Atravs dele torna-se possvel disponibilizar informaes em tempo Real,
para vrios usurios ao mesmo tempo.
Uma subcategoria do IMS o IMS-DC. Este se utiliza de Base de Dados SQL (DB2) ou
outras para obter as informaes necessrias a serem demonstradas.
Cada tipo de processamento demonstrado ao usurio previamente identificado atravs do
Cdigo da Transao, que usualmente o nome do programa.
Um funcionamento normal de processo On-line, d-se da seguinte forma:
- O usurio digita a informao a ser solicitada atravs de uma tela
previamente configurada
- efetuada uma consistncia (verificao de validade) das informaes
digitadas. Em caso de inconsistncias devolvida a tela ao usurio com
mensagem explicativa do ocorrido.
- efetuada a consulta solicitada na Base de Dados do programa e
demonstradas na tela as informaes solicitadas de acordo com as restries
estabelecidas no cdigo.
A diferena bsica entre um processamento On-line e um processamento Batch, a de que
no existe uma seqncia lgica obrigatria nas aes do usurio, ou seja, o usurio pode
tomar qualquer tipo de ao a qualquer tempo, cabendo ao programa distinguir se esta ao
vlida ou no naquele momento. Enquanto que no processamento Batch, se faz obrigatria uma
ordem lgica da entrada dos dados (via registros de arquivos, dados de tabelas, etc). Esta
diferena deve ser compreendida pois como j dissemos, o programa trata dados de vrios
usurios ao mesmo tempo e o que vlido para um, pode no ser vlido para outro. Este
tambm o conceito de MULTI-USURIO.

Pgina 2 de 70

Curso de Programao Cobol - Online


Linguagem MFS (Message Format Service)
Como mencionado anteriormente o usurio ira utilizar uma tela previamente formatada.
Esta tela como podemos deduzir, a ligao entre o usurio e o programa que ir efetuar o
processamento. Para a gerao desta tela foi criada uma linguagem especfica, o MFS.
O MFS faz parte do IMS e possui como funo, desenhar a tela.
A tela, aps pronta, estar apta a formatar as informaes (Message) a serem transmitidas
para o programa.
A tela, com base em um formato definido, capaz de conhecer as caractersticas, tipo e o
layout da mensagem que envia e recebe do programa.
Dentre as funes mais comuns do MFS esto includas o alinhamento, preenchimento de
campos, caractersticas de campo, dentre outras.
Aps sua compilao e linkedio, esta tela (agora cdigo objeto), armazenada em uma
biblioteca especial do IMS.
Agora veremos a estrutura do MFS.
O MFS possui quatro blocos de controle, sendo eles:
-DIF (DEVICE INPUT FORMAT)
Indica o formato da mensagem que o MFS recebeu do terminal
-DOF (DEVICE OUTPUT FORMAT)
Indica o formato da mensagem que o MFS enviar ao terminal
-MID (MESSAGE INPUT DESCRIPTOR)
Indica como ser formatada a mensagem que ser enviada para o
programa de aplicao
-MOD (MESSAGE OUTPUT DESCRIPTOR)
Indica em qual formato a mensagem vir do programa de
aplicao

Pgina 3 de 70

Curso de Programao Cobol - Online


Fluxo das Informaes
Ao teclar ENTER ou uma das PFs (F1...F24) em uma tela, as informaes sero tratadas
pelo MID da tela que ir format-las e envi-las ao programa. Aps o tratamento das
informaes o programa envia uma mensagem de sada que tratada pelo MOD da tela,
utilizando-se dos formatos definidos na mesma.

TERMINAL

MID(MFS)

PROGRAMA

FORMATO

MOD(MFS)

FORMATO

Pgina 4 de 70

Curso de Programao Cobol - Online


Linguagem MFS
Consideraes Gerais:
Um asterisco(*) na coluna 1 indica que ser uma linha de comentrio.
Um X na coluna 72 indica continuao de definio. Neste caso na prxima linha, o restante
da definio deve iniciar na coluna 16.
DIF/DOF

FMT
Indica para o MFS que este bloco trata-se de um FORMAT, ou seja, a rea que conter o
desenho da tela, juntamente com o posicionamento e atributos dos campos e literais.
DEV: Determina as informaes do terminal ou impressora utilizados.
TYPE=(3270,2)
TYPE=(3270P,2)
FEAT
FEAT=IGNOREFEAT=n
SYSMSG
DSCA
aparecer a tela.
DSCA=X00A0
DSCA=X00B0
PFK

Terminais
Tele-Impressoras

- Indica o numero de colunas da tela


Assume default do terminal 3270(IBM)
- Para tele-impressoras, onde n o numero de colunas
Indica o campo que receber as mensagens do IMS
- utilizado somente em telas. Indica se ser soado um bipe ao
-

No soa bipe
Soa bipe

Neste parmetro ser indicado a ao a ser executada por PF.


Ex.: /RCL Efetua a desconexo
/FOR Insere uma tela
XXXX9999 Starta uma transao (Chama o programa)

Pgina 5 de 70

Curso de Programao Cobol - Online


PAGE
- Usado somente em tele-impressoras. Indica o numero de linhas da
pagina. Como padro, adotado PAGE=(66,SPACE). O parmetro SPACE faz com que o MFS
complete as linhas entre a ultima definida com o total de linhas da pagina com brancos.
DIV: Contem as informaes sobre a tela.
TYPE=INOUT
TYPE=OUTPUT-

- Telas (Navegam dados da tela para o pgm e vice-versa)


Tele-Impressoras (Navegam dados do pgm para a tela)

DPAGE CURSOR - Informa a posio inicial do cursor na tela.


DPAGE CURSOR((LL,CC,POSI))
Onde: LL Linha
CC Coluna
POSI Utilizado quando se quer o posicionamento do cursor no momento do
ENTER ou PF acionada. Este possui tamanho de 4 bytes (a ser definido no
MOD) e no programa devem ser definidos dois campos, sendo eles :
INP-LINHA-T000 PIC S9(04) COMP
INP-COLUNA-T000 PIC S9(04) COMP
DFLD

Define um campo ou literal na tela.

LTH=n

Tamanho do campo

POS=(LL,CC)

Posio do campo. Onde: LL Linha(1 a 24) CC Coluna(2 a 80)


Antes de cada campo/literal, deve se guardar um byte, onde ser
gravada a informao de atributo do mesmo

ATTR
ALPHA
NUM
PROT
NOPROT
NORM
HI
NOMOD
MOD
DISP
NODISP

Atributo do campo/literal
Alfabtico (DEFAULT)
Numrico (p/ terminais inteligentes)
Protegido
No Protegido (DEFAULT)
Brilho Normal (DEFAULT)
Brilho Intenso
No modificvel (DEFAULT)
Modificvel
Disponvel (DEFAULT)
No disponvel

DO........ENDDO- Identifica um bloco de repetio.


Ex.: DO x, y, z Sendo x: Nmero de ocorrncias,
y: Quantidade de linhas da ocorrncia e
z: Distancia entre blocos.
ENDDO Fecha do DO.
Quando se utiliza somente x ou x e y, as ocorrncias so dispostas na vertical.
Quando se utiliza x, y e z, as ocorrncias so dispostas na horizontal.
FMTEND

Indica o final do DIF/DOF.

Pgina 6 de 70

Curso de Programao Cobol - Online


MID/MOD

MSG: Especifica ao MFS que esta rea se trata da definio de mensagem.


TYPE: Se =INPUT, indica que o bloco ira formatar a menagem de entrada (MID).
Se = OUTPUT, indica que o bloco ira formatar a menagem de sada (MOD).
SOR: Este parmetro efetua a amarrao do MID/MOD com o DIF/DOF.
NXT: Este parmetro efetua a amarrao do MID com o MOD e vice-versa.
FILL=PT: Utilizado no MOD, indica que os campos da tela ficaro sem contedo caso as
reas correspondentes aos mesmos estejam vazias.
SEG: Indica o inicio do bloco de mensagem.
MFLD: Define um campo a ser transmitido ou recebido.
LTH=n: Indica o tamanho do campo
FILL: Indica o caracter de preenchimento do campo. Geralmente utilizamos:
FILL=C Completa com o caracter (brancos)
FILL=C0 Completa com o caracter 0 (zeros em decimal)
FILL=XF0 Completa com o hexadecimal F0 (zeros em hexa)
JUST: Indica o alinhamento do contedo do campo
JUST=L Alinhamento do contedo do campo a esquerda
JUST=R Alinhamento do contedo do campo a direita

Somente no MOD:
ATTR=YES: Informa que o campo receber atributo via programa. Neste caso o
LTH deve ser aumentado em 2 bytes, para comportar o contedo do atributo e
do campo
MSGEND: Indica o fim do bloco
END: Indica o termino da definio da tela.

Pgina 7 de 70

Curso de Programao Cobol - Online


Agora vamos ver um exemplo com a tela abaixo:

Esta, uma tela de menu. Abaixo veremos sua codificao em MFS.


***********************************************************************
*
***********************************************************************
*
TELA.................: CBCLT150
*
*
PROGRAMADOR..........:
*
*
SUPERVISOR...........:
*
*
ANALISTA.............:
- GRUPO
*
*
DATA.................:
*
*
*
***********************************************************************
PRINT NOGEN
XXT150
FMT
DEV
TYPE=(3270,2),FEAT=IGNORE,SYSMSG=MENSAG,DSCA=X'00A0',
X
PFK=(PF,1='HELP6100 1500 ',2='/RCL
.',
X
03='CBCL1500
3',04='CBCL1500
*',
X
05='CBCL1500
5',06='CBCL1500
*',
X
07='CBCL1500
*',08='CBCL1500
*',
X
09='CBCL1500
*',10='CBCL1500
*',
X
11='CBCL1500
*',12='CBCL1500
*',
X
13='CBCL1500
*',14='CBCL1500
*',
X
15='CBCL1500
*',16='CBCL1500
*',
X
17='CBCL1500
*',18='CBCL1500
*',
X
19='CBCL1500
*',20='CBCL1500
*',
X
21='CBCL1500
*',22='CBCL1500
*',
X
23='CBCL1500
*',24='CBCL1500
*')
*---------------------------------------------------------------------*
*
D I F / D O F
*
*---------------------------------------------------------------------*
DIV TYPE=INOUT
DPAGE CURSOR=((08,23))

Pgina 8 de 70

Curso de Programao Cobol - Online


*---------------------------------------------------------------------*
*
LINHA 01
*
*---------------------------------------------------------------------*
DFLD 'CBCL1500',POS=(01,02),ATTR=PROT
DFLD 'INDICE DE LIQUIDEZ',POS=(01,34),ATTR=(PROT,HI)
DFLD 'CBCLT150',POS=(01,73),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 02
*
*---------------------------------------------------------------------*
DATA
DFLD POS=(02,02),LTH=010,ATTR=(NUM,MOD,PROT)
DFLD 'MENU PRINCIPAL',POS=(02,35),ATTR=(PROT,HI)
HORA
DFLD POS=(02,73),LTH=008,ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 04
*
*---------------------------------------------------------------------*
NVOP
DFLD POS=(04,14),LTH=02,ATTR=(NUM,MOD,PROT,NODISP)
*---------------------------------------------------------------------*
*
LINHA 05
*
*---------------------------------------------------------------------*
SENHAS
DFLD POS=(05,02),LTH=37,ATTR=(NUM,PROT,MOD,NODISP)
*---------------------------------------------------------------------*
*
LINHA 08
*
*---------------------------------------------------------------------*
OPCAO
DFLD POS=(08,23),LTH=02,ATTR=(NUM,MOD)
DFLD '01 - CARTEIRA',POS=(08,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 10
*
*---------------------------------------------------------------------*
DFLD '02 - CLIENTE',POS=(10,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 12
*
*---------------------------------------------------------------------*
DFLD '03 - SACADO',POS=(12,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 14
*
*---------------------------------------------------------------------*
DFLD '04 - CLIENTE X SACADO',POS=(14,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 16
*
*---------------------------------------------------------------------*
DFLD '05 - GRUPO',POS=(16,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 18
*
*---------------------------------------------------------------------*
DFLD '06 - GRUPO X EMPRESA',POS=(18,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 23
*
*---------------------------------------------------------------------*
MENSAG
DFLD POS=(23,02),LTH=78,ATTR=(PROT,MOD,HI)
*---------------------------------------------------------------------*
*
LINHA 24
*
*---------------------------------------------------------------------*
DFLD 'PF: 1-AJUDA 2-DESCONEXAO 3-PROC.ANT 5-MENU ROT',
X
POS=(24,02),ATTR=(PROT,HI)
*---------------------------------------------------------------------*
FMTEND

Pgina 9 de 70

Curso de Programao Cobol - Online


***********************************************************************
*
M I D
*
***********************************************************************
CBCLI150 MSG
TYPE=INPUT,SOR=(XXT150,IGNORE),NXT=CBCLT150,OPT=1
SEG
MFLD (PF,'CBCL1500
.'),LTH=15
MFLD SENHAS,LTH=37
MFLD NVOP,LTH=02,FILL=C'0',JUST=R
MFLD DATA,LTH=10,FILL=C' ',JUST=L
MFLD OPCAO,LTH=02,FILL=C' ',JUST=R
MSGEND
***********************************************************************
*
M O D
*
***********************************************************************
CBCLT150 MSG
TYPE=OUTPUT,SOR=(XXT150,IGNORE),NXT=CBCLI150,OPT=1,
X
FILL=PT
SEG
MFLD (HORA,TIME)
MFLD SENHAS,LTH=37
MFLD NVOP,LTH=02
MFLD DATA,LTH=10
MFLD OPCAO,LTH=04,ATTR=YES
MFLD MENSAG,LTH=79
MSGEND
END
Agora que j vimos como desenhar a tela, vamos explicar o que deve ser feito em um
programa para que o mesmo faa a interao com a tela.
WORKING-STORAGE SECTION.
Devem ser criadas as seguintes reas:
reas de Input e Output (Tela)
So definidas para receber e enviar os dados para a tela. O Layout dessas deve
corresponder com a definio do MID e MOD da tela. Essas reas devem ser
inicializadas por dois campos.
LL Indica o tamanho da rea
(pic s9(04) comp.)
ZZ rea reservada para o IMS
(pic s9(04) comp.)
Comu-Area (reas de Input / output da transao)
So definidas para receber e enviar dados para outra transao (programa). O
Layout dessas reas deve coincidir com a rea do programa que ir receber as
informaes.
LL Indica o tamanho da rea
(pic s9(04) comp.)
ZZ rea reservada para o IMS
(pic s9(04) comp.)
TRANCODE Nome do programa que enviou a mensagem.
MODNAME(WRK-TELA)
definida com 8(oito) posies, na qual deve ser valorizado o nome do destino da
mensagem de sada, que pode ser o nome de uma tela ou programa.

Pgina 10 de 70

Curso de Programao Cobol - Online


FUNES
So reas utilizadas para informar o comando a ser executado pelo IMS.
GU
- L uma mensagem enviada ao programa
ISRT
- Envia uma mensagem
CHNG- Altera o destino de uma mensagem
LINKAGE SECTION.
Nesta section so definidas duas reas importantes: IO-PCB e ALT-PCB
01

01

IO-PCB.
03 IO-LTERM
03 FILLER
03 IO-STATUS
03 FILLER
03 IO-MODNAME

PIC
PIC
PIC
PIC
PIC

X(08).
X(02).
X(02).
X(12).
X(08).

ALT-PCB.
03 ALT-LTERM
03 FILLER
03 ALT-STATUS
03 FILLER
03 ALT-MODNAME

PIC
PIC
PIC
PIC
PIC

X(08).
X(02).
X(02).
X(12).
X(08).

IO-PCB: Ela representa o terminal lgico que enviou a mensagem de entrada para o programa,
e muda dinamicamente quando a mensagem de entrada recebida, pois deve possuir o nome do
terminal de cada mensagem. formada pelas seguintes reas:
IO-LTERM: Endereo do Terminal Lgico 8 bytes
IO-STATUS: Valorizado com o STATUS CODE que mostra o resultado de uma
chamada ao IMS. Contedo branco significa resultado OK, enquanto que QC significa que no
existem mais mensagens na fila para serem processadas.
IO-MODNAME: Contm o nome do MOD que est ativo.

ALT-PCB: utilizada quando enviamos a mensagem para um terminal lgico diferente


(impressoras) ou para outro programa. formada pelas seguintes reas:
ALT-LTERM: Endereo do Terminal Lgico/Pgm a ser enviada a mensagem 8 bytes
ALT-STATUS: Valorizado com o STATUS CODE que mostra o resultado de uma
chamada ao IMS. Contedo branco significa resultado OK.
ALT-MODNAME: Contm o nome do MOD que ser enviada a mensagem.

Pgina 11 de 70

Curso de Programao Cobol - Online


PROCEDURE DIVISION
Como primeiro comando desta, devemos efetuar a conexo com o IMS, informando quais PCBs
sero utilizadas pelo programa, da seguinte forma:
ENTRY 'DLITCBL' USING IO-PCB ALT-PCB.

FLUXOGRAMA

ROTINA
PRINCIPAL
2

RECEBER
MENSAGEM

ENCERRAR
EXECUO

INICIALIZA
AREAS

CALL
GU

PROCESSA
TELA

TRATAR PFs
E ENTER

1 Looping Incondicional
2 Se IO-STATUS = QC

Pgina 12 de 70

ENVIAR
MENSAGEM

CALL
ISRT

Curso de Programao Cobol - Online


Exemplo de Codificao:
*================================================================*
IDENTIFICATION DIVISION.
*================================================================*
PROGRAM-ID. CBCL1500.
AUTHOR.
NOME DO PROGRAMADOR.
*================================================================*
*
*
*----------------------------------------------------------------*
*
*
*
PROGRAMA.....: CBCL1500
*
*
PROGRAMADOR..:
*
*
ANALISTA.....:
*
*
DATA.........:
*
*
*
*----------------------------------------------------------------*
*
*
*
OBJETIVO.....: DISPONIBILIZAR TELA DE OPCOES PARA
*
*
EXECUCAO DO SISTEMA DE INDICE DE
*
*
LIQUIDEZ
*
*
*
*----------------------------------------------------------------*
*
*
*
TELAS
*
*
----*
*
*
*
CBCLT150 - MENU PRINCIPAL
*
*
*
*
MODULOS CHAMADOS
*
*
---------------*
*
*
*
- POOL0660 - INSERIR CARACTERES DE NULL NA MSG DE SAIDA *
*
- POOL5000 - OBTER MENSAGEM
*
*
- POOL7100 - TRATAR ERROS QUANDO PROGRAMA INVALIDO
*
*
- POOL7600 - OBTER DATA E HORA
*
*
*
*================================================================*
*================================================================*
ENVIRONMENT DIVISION.
*================================================================*
*----------------------------------------------------------------*
CONFIGURATION SECTION.
*----------------------------------------------------------------*
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*================================================================*
DATA DIVISION.
*================================================================*

Pgina 13 de 70

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
WORKING-STORAGE SECTION.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
*
DEFINICAO DE AREAS E FUNCOES
*
*----------------------------------------------------------------*
77
77

WRK-NOVA-OPCAO
WRK-OPCAO-ATUAL

PIC 9(02)
PIC 9(02)

VALUE ZEROS.
VALUE ZEROS.

01
01
01
01
01
01

WRK-GU
WRK-CHNG
WRK-ISRT
WRK-COD-USER
WRK-FUNCAO
WRK-TELA

PIC
PIC
PIC
PIC
PIC
PIC

VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

X(04)
X(04)
X(04)
9(07)
X(04)
X(08)

'GU'.
'CHNG'.
'ISRT'.
ZEROS.
SPACES.
SPACES.

*---------------------------------------------------------------*
*
AREA UTILIZADA PELA POOL5000
*
*---------------------------------------------------------------*
01

WRK-MENSAGEM.
03 FILLER
03 WRK-TRANSACAO
03 FILLER

PIC X(04)
PIC X(08)
PIC X(1988)

VALUE SPACES.
VALUE SPACES.
VALUE SPACES.

01
01

WRK-COD-DEPTO
FILLER REDEFINES
03 FILLER
03 WRK-DEPTO-SENHAS

PIC 9(06)
WRK-COD-DEPTO.
PIC 9(02).
PIC 9(04).

VALUE ZEROS.

*---------------------------------------------------------------*
*
AREAS PARA POOL7600
*
*---------------------------------------------------------------*
01

DATA-HORA.
05 DT-JULIANA
05 DT-AAMMDD
05 DT-AAAAMMDD
05 TI-HHMMSS
05 TI-HHMMSSMMMMMM
05 WRK-TIMESTAMP

PIC
PIC
PIC
PIC
PIC
PIC

9(05)
9(07)
9(09)
9(07)
9(13)
X(20).

COMP-3.
COMP-3.
COMP-3.
COMP-3.
COMP-3.

*---------------------------------------------------------------*
*
AREAS AUXILIARES DE DATA
*
*---------------------------------------------------------------*
01
01

WRK-AAAAMMDD
WRK-AAAAMMDD-R
03 WRK-AAAA
03 WRK-MM
03 WRK-DD

REDEFINES

PIC 9(08) VALUE ZEROS.


WRK-AAAAMMDD.
PIC 9(04).
PIC 9(02).
PIC 9(02).

Pgina 14 de 70

Curso de Programao Cobol - Online


01

WRK-DDMMAAAA.
03 WRK-DD
03 FILLER
03 WRK-MM
03 FILLER
03 WRK-AAAA
01 WRK-DDMMAAAA-R

REDEFINES

PIC 9(02) VALUE


PIC X(01) VALUE
PIC 9(02) VALUE
PIC X(01) VALUE
PIC 9(04) VALUE
WRK-DDMMAAAA
PIC X(10).

ZEROS.
'/'.
ZEROS.
'/'.
ZEROS.

*---------------------------------------------------------------*
*
TABELA CONTENDO O NOME DOS PGMS A SEREM CHAMADOS
*
*---------------------------------------------------------------*
01

FILLER.
03 TABELA.
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
03 TABELA-R
REDEFINES
05 TAB-PROGRAMA

PIC X(08) VALUE


PIC X(08) VALUE
PIC X(08) VALUE
PIC X(08) VALUE
PIC X(08) VALUE
PIC X(08) VALUE
TABELA OCCURS 6
PIC X(08).

'CBCL1710'.
'CBCL1510'.
'CBCL2010'.
'CBCL1570'.
'CBCL1810'.
'CBCL1910'.
TIMES.

*----------------------------------------------------------------*
*
AREA DE PASSAGEM DE CONTROLE
*
*----------------------------------------------------------------*
01

COMU-AREA.
03 COMU-LL
03 COMU-ZZ
03 COMU-TRANCODE
03 COMU-SENHAS

PIC S9(04) COMP VALUE +64.


PIC 9(04) COMP VALUE ZEROS.
PIC X(15)
VALUE SPACES.
PIC X(37)
VALUE SPACES.

*----------------------------------------------------------------*
*
INCLUSAO DA POOL7100 - TRATA ERRO
*
*----------------------------------------------------------------*
-INC POL7100C
*----------------------------------------------------------------*
* DEFINICAO DA AREA PARA RET-CODE DIFERENTES DE ZEROS(POOL0660) *
*----------------------------------------------------------------*
01

WRK-ERRO-POOL0660.
05 FILLER
PIC
'* RETURN-CODE DIFERENTE DE
05 FILLER
PIC
'* RET.COD = '.
05 WRK-RETURN-CODE
PIC
05 FILLER
PIC
'LOCAL = '.
05 WRK-LOCAL-ERRO
PIC

Pgina 15 de 70

X(47)
VALUE
ZEROS NA POOL0660 *'.
X(12)
VALUE
9(02)BB.
X(08)

VALUE

9(02)

VALUE ZEROS.

Curso de Programao Cobol - Online


*---------------------------------------------------------------*
*
DEFINICAO DE ATRIBUTOS
*
*---------------------------------------------------------------*
01

WRK-49369

PIC S9(008) COMP VALUE +49369.

*----------------------------------------------------------------*
*
AREAS DE MENSAGENS
*
*----------------------------------------------------------------*
01

WRK-MSG00021
'PF INVALIDA'.

PIC X(79) VALUE

01

WRK-MSG00032
PIC X(79) VALUE
'DIGITE A OPCAO DESEJADA E TECLE <ENTER>'.

01

WRK-MSG00041
'OPCAO INVALIDA'.

01

WRK-MSG00099
PIC X(79) VALUE
'OPCAO NAO DISPONIVEL NO MOMENTO'.

PIC X(79) VALUE

*----------------------------------------------------------------*
*
TELA CBCLT150 - INPUT
*
*----------------------------------------------------------------*
01

INPUT-T150.
03 FILLER
03 INP-PFK-T150
03 INP-SENHAS-T150
03 INP-NVOP-T150
03 INP-DATA-T150
03 INP-OPCAO-T150.
05 INP-OPCAO-T150-R

PIC
PIC
PIC
PIC
PIC

X(18).
X(01).
X(37).
X(02).
X(10).

PIC

9(02).

*----------------------------------------------------------------*
*
TELA CBCLT150 - OUTPUT
*
*----------------------------------------------------------------*
01

OUTPUT-T150.
03 OUT-LL-T150
03 OUT-ZZ-T150
03 OUT-SENHAS-T150
03 OUT-NVOP-T150
03 OUT-DADOS-T150.
05 OUT-DATA-T150
05 OUT-OPCAO-ATTR-T150
05 OUT-OPCAO-T150.
07 OUT-OPCAO-T150-N
05 OUT-MENSAG-T150

Pgina 16 de 70

PIC S9(04) COMP VALUE +136.


PIC S9(04) COMP VALUE +0.
PIC X(37).
PIC X(02).
PIC
PIC

X(10).
9(04) COMP.

PIC
PIC

9(02).
X(79).

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
* AREA DA POOL0660 COM MASCARA DA TELA CBCLT150 - SEGMENTO 00
*
*----------------------------------------------------------------*
01

660-CBCLT150.
03 660-LL-AREA-T150
03 660-LL-MENSAGEM-T150
03 660-SENHAS-T150
03 660-NVOP-T150
03 660-DATA-T150
03 660-OPCAO-T150
03 600-MENSAG-T150

PIC
PIC
PIC
PIC
PIC
PIC
PIC

9(04)
9(04)
9(04)
9(04)
9(04)
9(04)
9(04)

COMP
COMP
COMP
COMP
COMP
COMP
COMP

VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

0014.
0136.
0037.
1002.
0010.
2004.
0079.

*----------------------------------------------------------------*
LINKAGE SECTION.
*----------------------------------------------------------------*
01

01

IO-PCB.
03 IO-LTERM
03 FILLER
03 IO-STATUS
03 FILLER
03 IO-MODNAME

PIC
PIC
PIC
PIC
PIC

X(08).
X(02).
X(02).
X(12).
X(08).

ALT-PCB.
03 ALT-LTERM
03 FILLER
03 ALT-STATUS
03 FILLER
03 ALT-MODNAME

PIC
PIC
PIC
PIC
PIC

X(08).
X(02).
X(02).
X(12).
X(08).

*================================================================*
PROCEDURE DIVISION.
*================================================================*
ENTRY

'DLITCBL'

MOVE

WRK-GU

USING
TO

IO-PCB ALT-PCB
WRK-FUNCAO.

*----------------------------------------------------------------*
0000-OBTER-MENSAGEM SECTION.
*----------------------------------------------------------------*
CALL

'POOL5000'

USING

IF

RETURN-CODE EQUAL 04 OR 12
GOBACK.

PERFORM 1000-PROCESSAR-MENSAGEM

Pgina 17 de 70

WRK-FUNCAO
IO-PCB
ALT-PCB
WRK-MENSAGEM
WRK-TELA
WRK-NOVA-OPCAO
WRK-COD-USER
WRK-OPCAO-ATUAL
WRK-COD-DEPTO.

Curso de Programao Cobol - Online


GO

TO 0000-OBTER-MENSAGEM.

*----------------------------------------------------------------*
0000-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1000-PROCESSAR-MENSAGEM SECTION.
*----------------------------------------------------------------*
MOVE 'CBCLT150'
IF

TO

WRK-TELA

WRK-TRANSACAO
NOT EQUAL 'CBCL1500'
MOVE
WRK-MSG00032
TO
OUT-MENSAG-T150

ELSE

PERFORM 1100-PROCESSAR-CBCLT150.

IF

WRK-TELA
EQUAL 'CBCLT150'
PERFORM 1200-OBTER-DATA
PERFORM 1300-INSERIR-TELA.

*----------------------------------------------------------------*
1000-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1100-PROCESSAR-CBCLT150 SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
IF
IF

IF

WRK-MENSAGEM
SPACES

TO
TO

INPUT-T150
OUT-DADOS-T150

INP-OPCAO-T150
NOT EQUAL SPACES
INSPECT INP-OPCAO-T150 REPLACING LEADING ' ' BY '0'.
INP-PFK-T150
EQUAL '*'
MOVE INP-OPCAO-T150
TO
OUT-OPCAO-T150
MOVE WRK-MSG00021
TO
OUT-MENSAG-T150
GO
TO
1100-99-FIM.
INP-PFK-T150
MOVE INP-OPCAO-T150
GO

EQUAL 'H'
TO
OUT-OPCAO-T150
TO
1100-99-FIM.

IF ((INP-OPCAO-T150
NOT NUMERIC
) OR
(INP-OPCAO-T150-R NOT EQUAL 01 AND 02 AND 03 AND
04 AND 05 AND 06
))
MOVE INP-OPCAO-T150
TO
OUT-OPCAO-T150
MOVE WRK-49369
TO
OUT-OPCAO-ATTR-T150
MOVE WRK-MSG00041
TO
OUT-MENSAG-T150
GO
TO
1100-99-FIM.
IF

(INP-OPCAO-T150-R NOT EQUAL


AND 04 AND 05 AND 06)
MOVE INP-OPCAO-T150
TO
MOVE WRK-49369
TO
MOVE WRK-MSG00099
TO
GO
TO

PERFORM 1110-PASSAR-CONTROLE.

Pgina 18 de 70

01 AND 02 AND 03
OUT-OPCAO-T150
OUT-OPCAO-ATTR-T150
OUT-MENSAG-T150
1100-99-FIM.

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
1100-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1110-PASSAR-CONTROLE SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
MOVE
MOVE
MOVE

TAB-PROGRAMA (INP-OPCAO-T150-R)
INP-SENHAS-T150
'CBCL1500'
COMU-AREA
WRK-CHNG

TO
TO
TO
TO
TO

WRK-TELA
COMU-SENHAS
COMU-TRANCODE
WRK-MENSAGEM
WRK-FUNCAO.

*----------------------------------------------------------------*
1110-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1200-OBTER-DATA SECTION.
*----------------------------------------------------------------*
CALL

'POOL7600'

USING DATA-HORA

MOVE
DT-AAAAMMDD
MOVE CORR WRK-AAAAMMDD-R
MOVE
WRK-DDMMAAAA-R

TO
TO
TO

WRK-AAAAMMDD
WRK-DDMMAAAA
OUT-DATA-T150.

*----------------------------------------------------------------*
1200-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1300-INSERIR-TELA SECTION.
*----------------------------------------------------------------*
CALL

'POOL0660'

IF

RETURN-CODE
NOT EQUAL
MOVE
'APL'
TO
MOVE
RETURN-CODE
TO
MOVE
1
TO
MOVE
WRK-ERRO-POOL0660
TO
PERFORM 9999-ROTINA-ERRO.

MOVE
MOVE

WRK-ISRT
OUTPUT-T150

USING

TO
TO

OUTPUT-T150
660-CBCLT150
ZEROS
ERR-TIPO-ACESSO
WRK-RETURN-CODE
WRK-LOCAL-ERRO
ERR-TEXTO
WRK-FUNCAO
WRK-MENSAGEM.

*----------------------------------------------------------------*
1300-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT

Pgina 19 de 70

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
9999-ROTINA-ERRO SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
MOVE
MOVE

'SENHAS02'
WRK-COD-USER
WRK-COD-DEPTO
'CBCL1500'

CALL

'POOL7100'

TO
TO
TO
TO

ERR-PGM
ERR-COD-USER
ERR-COD-DEPTO
ERR-MODULO

USING

IO-PCB
ERRO-AREA
ALT-PCB

GOBACK.

*----------------------------------------------------------------*
9999-99-FIM. EXIT.
*----------------------------------------------------------------*

Pgina 20 de 70

Curso de Programao Cobol - Online


Trmite das informaes

TELA

INPUT

OUTPUT

PROG1

COMU-AREA

TELA

INPUT

OUTPUT

PROG2

Pgina 21 de 70

Curso de Programao Cobol - Online


Atributos:
Pelo programa, podemos alterar o atributo de um campo na tela (faz-lo brilhar, posicionar o
cursor, etc).
Para tanto, se faz necessrias algumas alteraes na tela e no programa.
Na tela: No MOD devemos acrescentar 2 bytes ao tamanho do campo e incluir o parmetro
ATTR=YES.
No programa: Na rea de output da tela, devemos incluir um campo no formato PIC S9(04)
comp. Imediatamente anterior ao campo cujo atributo ser modificado.
Sempre que no valorizarmos este campo de atributo no programa, o campo obedecer ao
atributo definido para ele na tela.
Se no informamos o posicionamento de cursor via programa, o cursor obedecer o DPAGE
CURSOR definido na tela.
Se definirmos posicionamento de cursor para mais de um campo, o posicionamento do mesmo
ocorrer no primeiro atributo do MOD.
Para campos desprotegidos, devemos utilizar atributos coerentes a tipagem do campo
(numrico ou alfanumrico). Para campos protegidos, devemos preferencialmente utilizar
atributos de campos numricos, para que possamos evitar possveis situaes de erro de
posicionamento de cursor do MFS.
Caso seja necessrio podemos utilizar a rpf CD ATRIBUTO, no Roscoe, para verificarmos
quais os valores de atributos que devemos carregar para alterar a situao do campo, porm os
atributos mais utilizados so:
Numrico
Numrico
Numrico
Numrico
Numrico
Numrico
Alfanumrico
Alfanumrico
Alfanumrico
Alfanumrico
Alfanumrico
Alfanumrico

Brilhante
Brilhante
Brilhante
Normal
Normal
Normal
Brilhante
Brilhante
Brilhante
Normal
Normal
Normal

Desprotegido
Desprotegido
Protegido
Desprotegido
Desprotegido
Protegido
Desprotegido
Desprotegido
Protegido
Desprotegido
Desprotegido
Protegido

Pgina 22 de 70

Cursor

Cursor

Cursor

Cursor

+49369
+217
+249
+49361
+209
+241
+49353
+201
+233
+49345
+193
+225

Curso de Programao Cobol - Online


Exemplo da alterao na tela:
***********************************************************************
*
*
***********************************************************************
*
TELA.................: CBCLT150
*
*
PROGRAMADORA.........: ALINE DE NORONHA ABRAO *
*
SUPERVISORA..........: ANDREA MATTOS
*
*
ANALISTA.............: SILVIO
- GRUPO 83
*
*
DATA.................: 16/06/2000
*
*
*
***********************************************************************
PRINT NOGEN
W3T150
FMT
DEV
TYPE=(3270,2),FEAT=IGNORE,SYSMSG=MENSAG,DSCA=X'00A0',
X
PFK=(PF,1='HELP6100 1500 ',2='/RCL
.',
X
03='CBCL1500
3',04='CBCL1500
*',
X
05='CBCL1500
5',06='CBCL1500
*',
X
07='CBCL1500
*',08='CBCL1500
*',
X
09='CBCL1500
*',10='CBCL1500
*',
X
11='CBCL1500
*',12='CBCL1500
*',
X
13='CBCL1500
*',14='CBCL1500
*',
X
15='CBCL1500
*',16='CBCL1500
*',
X
17='CBCL1500
*',18='CBCL1500
*',
X
19='CBCL1500
*',20='CBCL1500
*',
X
21='CBCL1500
*',22='CBCL1500
*',
X
23='CBCL1500
*',24='CBCL1500
*')
*---------------------------------------------------------------------*
*
D I F / D O F
*
*---------------------------------------------------------------------*
DIV TYPE=INOUT
DPAGE CURSOR=((08,23))
*---------------------------------------------------------------------*
*
LINHA 01
*
*---------------------------------------------------------------------*
DFLD 'CBCL1500',POS=(01,02),ATTR=PROT
DFLD 'INDICE DE LIQUIDEZ',POS=(01,34),ATTR=(PROT,HI)
DFLD 'CBCLT150',POS=(01,73),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 02
*
*---------------------------------------------------------------------*
DATA
DFLD POS=(02,02),LTH=010,ATTR=(NUM,MOD,PROT)
DFLD 'MENU PRINCIPAL',POS=(02,35),ATTR=(PROT,HI)
HORA
DFLD POS=(02,73),LTH=008,ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 04
*
*---------------------------------------------------------------------*
NVOP
DFLD POS=(04,14),LTH=02,ATTR=(NUM,MOD,PROT,NODISP)
*---------------------------------------------------------------------*
*
LINHA 05
*
*---------------------------------------------------------------------*
SENHAS
DFLD POS=(05,02),LTH=37,ATTR=(NUM,PROT,MOD,NODISP)
*---------------------------------------------------------------------*
*
LINHA 08
*
*---------------------------------------------------------------------*
OPCAO
DFLD POS=(08,23),LTH=02,ATTR=(NUM,MOD)
DFLD '01 - CARTEIRA',POS=(08,26),ATTR=PROT

Pgina 23 de 70

Curso de Programao Cobol - Online


*---------------------------------------------------------------------*
*
LINHA 10
*
*---------------------------------------------------------------------*
DFLD '02 - CLIENTE',POS=(10,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 12
*
*---------------------------------------------------------------------*
DFLD '03 - SACADO',POS=(12,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 14
*
*---------------------------------------------------------------------*
DFLD '04 - CLIENTE X SACADO',POS=(14,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 16
*
*---------------------------------------------------------------------*
DFLD '05 - GRUPO',POS=(16,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 18
*
*---------------------------------------------------------------------*
DFLD '06 - GRUPO X EMPRESA',POS=(18,26),ATTR=PROT
*---------------------------------------------------------------------*
*
LINHA 23
*
*---------------------------------------------------------------------*
MENSAG
DFLD POS=(23,02),LTH=78,ATTR=(PROT,MOD,HI)
*---------------------------------------------------------------------*
*
LINHA 24
*
*---------------------------------------------------------------------*
DFLD 'PF: 1-AJUDA 2-DESCONEXAO 3-PROC.ANT 5-MENU ROT',
X
POS=(24,02),ATTR=(PROT,HI)
*---------------------------------------------------------------------*
FMTEND
***********************************************************************
*
M I D
*
***********************************************************************
CBCLI150 MSG
TYPE=INPUT,SOR=(W3T150,IGNORE),NXT=CBCLT150,OPT=1
SEG
MFLD (PF,'CBCL1500
.'),LTH=15
MFLD SENHAS,LTH=37
MFLD NVOP,LTH=02,FILL=C'0',JUST=R
MFLD DATA,LTH=10,FILL=C' ',JUST=L
MFLD OPCAO,LTH=02,FILL=C' ',JUST=R
MSGEND
***********************************************************************
*
M O D
*
***********************************************************************
CBCLT150 MSG
TYPE=OUTPUT,SOR=(W3T150,IGNORE),NXT=CBCLI150,OPT=1,
X
FILL=PT
SEG
MFLD (HORA,TIME)
MFLD SENHAS,LTH=37
MFLD NVOP,LTH=02
MFLD DATA,LTH=10
MFLD OPCAO,LTH=04,ATTR=YES
MFLD MENSAG,LTH=79
MSGEND
END

Pgina 24 de 70

Curso de Programao Cobol - Online


Exemplo da alterao no programa:
*================================================================*
IDENTIFICATION DIVISION.
*================================================================*
PROGRAM-ID. CBCL1500.
AUTHOR.
ALINE DE NORONHA ABRAO.
*================================================================*
*
*
*----------------------------------------------------------------*
*
*
*
PROGRAMA.....: CBCL1500
*
*
PROGRAMADORA.: ALINE DE NORONHA ABRAO *
*
ANALISTA.....: SILVIO
*
*
DATA.........: 15/06/2000
*
*
*
*----------------------------------------------------------------*
*
*
*
OBJETIVO.....: DISPONIBILIZAR TELA DE OPCOES PARA
*
*
EXECUCAO DO SISTEMA DE INDICE DE
*
*
LIQUIDEZ
*
*
*
*----------------------------------------------------------------*
*
*
*
TELAS
*
*
----*
*
*
*
CBCLT150 - MENU PRINCIPAL
*
*
*
*
MODULOS CHAMADOS
*
*
---------------*
*
*
*
- POOL0660 - INSERIR CARACTERES DE NULL NA MSG DE SAIDA *
*
- POOL5000 - OBTER MENSAGEM
*
*
- POOL7100 - TRATAR ERROS QUANDO PROGRAMA INVALIDO
*
*
- POOL7600 - OBTER DATA E HORA
*
*
*
*================================================================*
*================================================================*
ENVIRONMENT DIVISION.
*================================================================*
*----------------------------------------------------------------*
CONFIGURATION SECTION.
*----------------------------------------------------------------*
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.

Pgina 25 de 70

Curso de Programao Cobol - Online


*================================================================*
DATA DIVISION.
*================================================================*
*----------------------------------------------------------------*
WORKING-STORAGE SECTION.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
*
DEFINICAO DE AREAS E FUNCOES
*
*----------------------------------------------------------------*
77
77

WRK-NOVA-OPCAO
WRK-OPCAO-ATUAL

PIC 9(02)
PIC 9(02)

VALUE ZEROS.
VALUE ZEROS.

01
01
01
01
01
01

WRK-GU
WRK-CHNG
WRK-ISRT
WRK-COD-USER
WRK-FUNCAO
WRK-TELA

PIC
PIC
PIC
PIC
PIC
PIC

VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

X(04)
X(04)
X(04)
9(07)
X(04)
X(08)

'GU'.
'CHNG'.
'ISRT'.
ZEROS.
SPACES.
SPACES.

*---------------------------------------------------------------*
*
AREA UTILIZADA PELA POOL5000
*
*---------------------------------------------------------------*
01

WRK-MENSAGEM.
03 FILLER
03 WRK-TRANSACAO
03 FILLER

PIC X(04)
PIC X(08)
PIC X(1988)

VALUE SPACES.
VALUE SPACES.
VALUE SPACES.

01
01

WRK-COD-DEPTO
FILLER REDEFINES
03 FILLER
03 WRK-DEPTO-SENHAS

PIC 9(06)
WRK-COD-DEPTO.
PIC 9(02).
PIC 9(04).

VALUE ZEROS.

*---------------------------------------------------------------*
*
AREAS PARA POOL7600
*
*---------------------------------------------------------------*
01

DATA-HORA.
05 DT-JULIANA
05 DT-AAMMDD
05 DT-AAAAMMDD
05 TI-HHMMSS
05 TI-HHMMSSMMMMMM
05 WRK-TIMESTAMP

PIC
PIC
PIC
PIC
PIC
PIC

9(05)
9(07)
9(09)
9(07)
9(13)
X(20).

COMP-3.
COMP-3.
COMP-3.
COMP-3.
COMP-3.

*---------------------------------------------------------------*
*
AREAS AUXILIARES DE DATA
*
*---------------------------------------------------------------*
01
01

WRK-AAAAMMDD
WRK-AAAAMMDD-R
03 WRK-AAAA
03 WRK-MM
03 WRK-DD

REDEFINES

PIC 9(08) VALUE ZEROS.


WRK-AAAAMMDD.
PIC 9(04).
PIC 9(02).
PIC 9(02).

Pgina 26 de 70

Curso de Programao Cobol - Online


01

01

WRK-DDMMAAAA.
03 WRK-DD
03 FILLER
03 WRK-MM
03 FILLER
03 WRK-AAAA
WRK-DDMMAAAA-R

REDEFINES

PIC 9(02) VALUE


PIC X(01) VALUE
PIC 9(02) VALUE
PIC X(01) VALUE
PIC 9(04) VALUE
WRK-DDMMAAAA
PIC X(10).

ZEROS.
'/'.
ZEROS.
'/'.
ZEROS.

*---------------------------------------------------------------*
*
TABELA CONTENDO O NOME DOS PGMS A SEREM CHAMADOS
*
*---------------------------------------------------------------*
01

FILLER.
03 TABELA.
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
03 TABELA-R
REDEFINES
05 TAB-PROGRAMA

PIC X(08) VALUE


PIC X(08) VALUE
PIC X(08) VALUE
PIC X(08) VALUE
PIC X(08) VALUE
PIC X(08) VALUE
TABELA OCCURS 6
PIC X(08).

'CBCL1710'.
'CBCL1510'.
'CBCL2010'.
'CBCL1570'.
'CBCL1810'.
'CBCL1910'.
TIMES.

*----------------------------------------------------------------*
*
AREA DE PASSAGEM DE CONTROLE
*
*----------------------------------------------------------------*
01

COMU-AREA.
03 COMU-LL
03 COMU-ZZ
03 COMU-TRANCODE
03 COMU-SENHAS

PIC S9(04) COMP VALUE +64.


PIC 9(04) COMP VALUE ZEROS.
PIC X(15)
VALUE SPACES.
PIC X(37)
VALUE SPACES.

*----------------------------------------------------------------*
*
INCLUSAO DA POOL7100 - TRATA ERRO
*
*----------------------------------------------------------------*
-INC POL7100C
*----------------------------------------------------------------*
* DEFINICAO DA AREA PARA RET-CODE DIFERENTES DE ZEROS(POOL0660) *
*----------------------------------------------------------------*
01

WRK-ERRO-POOL0660.
05 FILLER
PIC
'* RETURN-CODE DIFERENTE DE
05 FILLER
PIC
'* RET.COD = '.
05 WRK-RETURN-CODE
PIC
05 FILLER
PIC
'LOCAL = '.
05 WRK-LOCAL-ERRO
PIC

Pgina 27 de 70

X(47)
VALUE
ZEROS NA POOL0660 *'.
X(12)
VALUE
9(02)BB.
X(08)

VALUE

9(02)

VALUE ZEROS.

Curso de Programao Cobol - Online


*---------------------------------------------------------------*
*
DEFINICAO DE ATRIBUTOS
*
*---------------------------------------------------------------*
01

WRK-49369

PIC S9(008) COMP VALUE +49369.

*----------------------------------------------------------------*
*
AREAS DE MENSAGENS
*
*----------------------------------------------------------------*
01

WRK-MSG00021
'PF INVALIDA'.

PIC X(79) VALUE

01

WRK-MSG00032
PIC X(79) VALUE
'DIGITE A OPCAO DESEJADA E TECLE <ENTER>'.

01

WRK-MSG00041
'OPCAO INVALIDA'.

01

WRK-MSG00099
PIC X(79) VALUE
'OPCAO NAO DISPONIVEL NO MOMENTO'.

PIC X(79) VALUE

*----------------------------------------------------------------*
*
TELA CBCLT150 - INPUT
*
*----------------------------------------------------------------*
01

INPUT-T150.
03 FILLER
03 INP-PFK-T150
03 INP-SENHAS-T150
03 INP-NVOP-T150
03 INP-DATA-T150
03 INP-OPCAO-T150.
05 INP-OPCAO-T150-R

PIC
PIC
PIC
PIC
PIC

X(18).
X(01).
X(37).
X(02).
X(10).

PIC

9(02).

*----------------------------------------------------------------*
*
TELA CBCLT150 - OUTPUT
*
*----------------------------------------------------------------*
01

OUTPUT-T150.
03 OUT-LL-T150
03 OUT-ZZ-T150
03 OUT-SENHAS-T150
03 OUT-NVOP-T150
03 OUT-DADOS-T150.
05 OUT-DATA-T150
05 OUT-OPCAO-ATTR-T150
05 OUT-OPCAO-T150.
07 OUT-OPCAO-T150-N
05 OUT-MENSAG-T150

Pgina 28 de 70

PIC S9(04) COMP VALUE +136.


PIC S9(04) COMP VALUE +0.
PIC X(37).
PIC X(02).
PIC
PIC

X(10).
9(04) COMP.

PIC
PIC

9(02).
X(79).

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
* AREA DA POOL0660 COM MASCARA DA TELA CBCLT150 - SEGMENTO 00
*
*----------------------------------------------------------------*
01

660-CBCLT150.
03 660-LL-AREA-T150
03 660-LL-MENSAGEM-T150
03 660-SENHAS-T150
03 660-NVOP-T150
03 660-DATA-T150
03 660-OPCAO-T150
03 600-MENSAG-T150

PIC
PIC
PIC
PIC
PIC
PIC
PIC

9(04)
9(04)
9(04)
9(04)
9(04)
9(04)
9(04)

COMP
COMP
COMP
COMP
COMP
COMP
COMP

VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

0014.
0136.
0037.
1002.
0010.
2004.
0079.

*----------------------------------------------------------------*
LINKAGE SECTION.
*----------------------------------------------------------------*
01

01

IO-PCB.
03 IO-LTERM
03 FILLER
03 IO-STATUS
03 FILLER
03 IO-MODNAME

PIC
PIC
PIC
PIC
PIC

X(08).
X(02).
X(02).
X(12).
X(08).

ALT-PCB.
03 ALT-LTERM
03 FILLER
03 ALT-STATUS
03 FILLER
03 ALT-MODNAME

PIC
PIC
PIC
PIC
PIC

X(08).
X(02).
X(02).
X(12).
X(08).

*================================================================*
PROCEDURE DIVISION.
*================================================================*
ENTRY

'DLITCBL'

MOVE

WRK-GU

USING
TO

IO-PCB ALT-PCB
WRK-FUNCAO.

*----------------------------------------------------------------*
0000-OBTER-MENSAGEM SECTION.
*----------------------------------------------------------------*
CALL

'POOL5000'

USING

IF

RETURN-CODE EQUAL 04 OR 12
GOBACK.

PERFORM 1000-PROCESSAR-MENSAGEM
GO

TO 0000-OBTER-MENSAGEM.

Pgina 29 de 70

WRK-FUNCAO
IO-PCB
ALT-PCB
WRK-MENSAGEM
WRK-TELA
WRK-NOVA-OPCAO
WRK-COD-USER
WRK-OPCAO-ATUAL
WRK-COD-DEPTO.

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
0000-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1000-PROCESSAR-MENSAGEM SECTION.
*----------------------------------------------------------------*
MOVE 'CBCLT150'
IF

TO

WRK-TELA

WRK-TRANSACAO
NOT EQUAL 'CBCL1500'
MOVE
WRK-MSG00032
TO
OUT-MENSAG-T150

ELSE

PERFORM 1100-PROCESSAR-CBCLT150.
IF

WRK-TELA
EQUAL 'CBCLT150'
PERFORM 1200-OBTER-DATA
PERFORM 1300-INSERIR-TELA.

*----------------------------------------------------------------*
1000-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1100-PROCESSAR-CBCLT150 SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
IF
IF

IF

WRK-MENSAGEM
SPACES

TO
TO

INPUT-T150
OUT-DADOS-T150

INP-OPCAO-T150
NOT EQUAL SPACES
INSPECT INP-OPCAO-T150 REPLACING LEADING ' ' BY '0'.
INP-PFK-T150
EQUAL '*'
MOVE INP-OPCAO-T150
TO
OUT-OPCAO-T150
MOVE WRK-MSG00021
TO
OUT-MENSAG-T150
GO
TO
1100-99-FIM.
INP-PFK-T150
MOVE INP-OPCAO-T150
GO

EQUAL 'H'
TO
OUT-OPCAO-T150
TO
1100-99-FIM.

IF ((INP-OPCAO-T150
NOT NUMERIC
) OR
(INP-OPCAO-T150-R NOT EQUAL 01 AND 02 AND 03 AND
04 AND 05 AND 06
))
MOVE INP-OPCAO-T150
TO
OUT-OPCAO-T150
MOVE WRK-49369
TO
OUT-OPCAO-ATTR-T150
MOVE WRK-MSG00041
TO
OUT-MENSAG-T150
GO
TO
1100-99-FIM.
IF

(INP-OPCAO-T150-R NOT EQUAL


AND 04 AND 05 AND 06)
MOVE INP-OPCAO-T150
TO
MOVE WRK-49369
TO
MOVE WRK-MSG00099
TO
GO
TO

PERFORM 1110-PASSAR-CONTROLE.

Pgina 30 de 70

01 AND 02 AND 03
OUT-OPCAO-T150
OUT-OPCAO-ATTR-T150
OUT-MENSAG-T150
1100-99-FIM.

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
1100-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1110-PASSAR-CONTROLE SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
MOVE
MOVE
MOVE

TAB-PROGRAMA (INP-OPCAO-T150-R)
INP-SENHAS-T150
'CBCL1500'
COMU-AREA
WRK-CHNG

TO
TO
TO
TO
TO

WRK-TELA
COMU-SENHAS
COMU-TRANCODE
WRK-MENSAGEM
WRK-FUNCAO.

*----------------------------------------------------------------*
1110-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1200-OBTER-DATA SECTION.
*----------------------------------------------------------------*
CALL

'POOL7600'

USING DATA-HORA

MOVE
DT-AAAAMMDD
MOVE CORR WRK-AAAAMMDD-R
MOVE
WRK-DDMMAAAA-R

TO
TO
TO

WRK-AAAAMMDD
WRK-DDMMAAAA
OUT-DATA-T150.

*----------------------------------------------------------------*
1200-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1300-INSERIR-TELA SECTION.
*----------------------------------------------------------------*
CALL

'POOL0660'

IF

RETURN-CODE
NOT EQUAL
MOVE
'APL'
TO
MOVE
RETURN-CODE
TO
MOVE
1
TO
MOVE
WRK-ERRO-POOL0660
TO
PERFORM 9999-ROTINA-ERRO.

MOVE
MOVE

WRK-ISRT
OUTPUT-T150

USING

TO
TO

OUTPUT-T150
660-CBCLT150
ZEROS
ERR-TIPO-ACESSO
WRK-RETURN-CODE
WRK-LOCAL-ERRO
ERR-TEXTO
WRK-FUNCAO
WRK-MENSAGEM.

*----------------------------------------------------------------*
1300-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT

Pgina 31 de 70

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
9999-ROTINA-ERRO SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
MOVE
MOVE

'SENHAS02'
WRK-COD-USER
WRK-COD-DEPTO
'CBCL1500'

CALL

'POOL7100'

TO
TO
TO
TO

ERR-PGM
ERR-COD-USER
ERR-COD-DEPTO
ERR-MODULO

USING

IO-PCB
ERRO-AREA
ALT-PCB

GOBACK.
*----------------------------------------------------------------*
9999-99-FIM. EXIT.
*----------------------------------------------------------------*

Pgina 32 de 70

Curso de Programao Cobol - Online


Pools
Devido a grande quantidade de informaes transmitidas entre tela e programa, se faz
necessrio o uso da POOL0660. Esta tem por finalidade, comprimir a mensagem.
Para utilizar esta pool, se faz necessria a definio de uma rea que conter informaes a
respeito dos campos da output da seguinte forma:
*----------------------------------------------------------------*
*
TELA CBCLT150 - OUTPUT
*
*----------------------------------------------------------------*
01

OUTPUT-T150.
03 OUT-LL-T150
03 OUT-ZZ-T150
03 OUT-SENHAS-T150
03 OUT-NVOP-T150
03 OUT-DADOS-T150.
05 OUT-DATA-T150
05 OUT-OPCAO-ATTR-T150
05 OUT-OPCAO-T150.
07 OUT-OPCAO-T150-N
05 OUT-MENSAG-T150

PIC S9(04) COMP VALUE +136.


PIC S9(04) COMP VALUE +0.
PIC X(37).
PIC X(02).
PIC
PIC

X(10).
9(04) COMP.

PIC
PIC

9(02).
X(79).

*----------------------------------------------------------------*
* AREA DA POOL0660 COM MASCARA DA TELA CBCLT150 - SEGMENTO 00
*
*----------------------------------------------------------------*
01

660-CBCLT150.
03 660-LL-AREA-T150
03 660-LL-MENSAGEM-T150
03 660-SENHAS-T150
03 660-NVOP-T150
03 660-DATA-T150
03 660-OPCAO-T150
03 600-MENSAG-T150

PIC
PIC
PIC
PIC
PIC
PIC
PIC

9(04)
9(04)
9(04)
9(04)
9(04)
9(04)
9(04)

COMP
COMP
COMP
COMP
COMP
COMP
COMP

VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

0014.
0136.
0037.
1002.
0010.
2004.
0079.

Notamos que no VALUE de cada campo possui um valor.


O primeiro campo contem o tamanho total da rea. Cada campo possui 2 bytes, portanto o
amanho total da rea ser de 14 bytes.
O segundo campo possui o tamanho total da rea de OUTPUT.

Pgina 33 de 70

Curso de Programao Cobol - Online


Os demais campos possuem o tamanho total do campo sendo que o primeiro byte deve seguir o
quadro abaixo:
0 PROTEGIDO SEM ATRIBUTO
1 DESPROTEGIDO SEM ATRIBUTO
2 PROTEGIDO COM ATRIBUTO
3 DESPROTEGIDO COM ATRIBUTO
Aconselhamos que defina-se 0 para todos os campos que no iro ser digitados na tela, e 2
para os que vo.
Para esta POOL, tambm definida uma rea de erro prpria.
Exemplo da chamada a POOL0660:
*================================================================*
IDENTIFICATION DIVISION.
*================================================================*
PROGRAM-ID. CBCL1500.
AUTHOR.
ALINE DE NORONHA ABRAO.
*================================================================*
*
*----------------------------------------------------------------*
*
*
*
PROGRAMA.....: CBCL1500
*
*
PROGRAMADORA.: ALINE DE NORONHA ABRAO *
*
ANALISTA.....: SILVIO
*
*
DATA.........: 15/06/2000
*
*
*
*----------------------------------------------------------------*
*
*
*
OBJETIVO.....: DISPONIBILIZAR TELA DE OPCOES PARA
*
*
EXECUCAO DO SISTEMA DE INDICE DE
*
*
LIQUIDEZ
*
*
*
*----------------------------------------------------------------*
*
*
*
TELAS
*
*
----*
*
*
*
CBCLT150 - MENU PRINCIPAL
*
*
*
*
MODULOS CHAMADOS
*
*
---------------*
*
*
*
- POOL0660 - INSERIR CARACTERES DE NULL NA MSG DE SAIDA *
*
- POOL5000 - OBTER MENSAGEM
*
*
- POOL7100 - TRATAR ERROS QUANDO PROGRAMA INVALIDO
*
*
- POOL7600 - OBTER DATA E HORA
*
*
*
*================================================================*

Pgina 34 de 70

Curso de Programao Cobol - Online


*================================================================*
ENVIRONMENT DIVISION.
*================================================================*
*----------------------------------------------------------------*
CONFIGURATION SECTION.
*----------------------------------------------------------------*
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*================================================================*
DATA DIVISION.
*================================================================*
*----------------------------------------------------------------*
WORKING-STORAGE SECTION.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
*
DEFINICAO DE AREAS E FUNCOES
*
*----------------------------------------------------------------*
77
77

WRK-NOVA-OPCAO
WRK-OPCAO-ATUAL

PIC 9(02)
PIC 9(02)

VALUE ZEROS.
VALUE ZEROS.

01
01
01
01
01
01

WRK-GU
WRK-CHNG
WRK-ISRT
WRK-COD-USER
WRK-FUNCAO
WRK-TELA

PIC
PIC
PIC
PIC
PIC
PIC

VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

X(04)
X(04)
X(04)
9(07)
X(04)
X(08)

'GU'.
'CHNG'.
'ISRT'.
ZEROS.
SPACES.
SPACES.

*---------------------------------------------------------------*
*
AREA UTILIZADA PELA POOL5000
*
*---------------------------------------------------------------*
01

01
01

WRK-MENSAGEM.
03 FILLER
03 WRK-TRANSACAO
03 FILLER

PIC X(04)
PIC X(08)
PIC X(1988)

VALUE SPACES.
VALUE SPACES.
VALUE SPACES.

WRK-COD-DEPTO
FILLER REDEFINES
03 FILLER
03 WRK-DEPTO-SENHAS

PIC 9(06)
WRK-COD-DEPTO.
PIC 9(02).
PIC 9(04).

VALUE ZEROS.

*---------------------------------------------------------------*
*
AREAS PARA POOL7600
*
*---------------------------------------------------------------*
01

DATA-HORA.
05 DT-JULIANA
05 DT-AAMMDD
05 DT-AAAAMMDD
05 TI-HHMMSS
05 TI-HHMMSSMMMMMM
05 WRK-TIMESTAMP

PIC
PIC
PIC
PIC
PIC
PIC

Pgina 35 de 70

9(05)
9(07)
9(09)
9(07)
9(13)
X(20).

COMP-3.
COMP-3.
COMP-3.
COMP-3.
COMP-3.

Curso de Programao Cobol - Online


*---------------------------------------------------------------*
*
AREAS AUXILIARES DE DATA
*
*---------------------------------------------------------------*
01
01

WRK-AAAAMMDD
WRK-AAAAMMDD-R
03 WRK-AAAA
03 WRK-MM
03 WRK-DD

01

WRK-DDMMAAAA.
03 WRK-DD
03 FILLER
03 WRK-MM
03 FILLER
03 WRK-AAAA
WRK-DDMMAAAA-R

01

REDEFINES

REDEFINES

PIC 9(08) VALUE ZEROS.


WRK-AAAAMMDD.
PIC 9(04).
PIC 9(02).
PIC 9(02).
PIC 9(02) VALUE
PIC X(01) VALUE
PIC 9(02) VALUE
PIC X(01) VALUE
PIC 9(04) VALUE
WRK-DDMMAAAA
PIC X(10).

ZEROS.
'/'.
ZEROS.
'/'.
ZEROS.

*---------------------------------------------------------------*
*
TABELA CONTENDO O NOME DOS PGMS A SEREM CHAMADOS
*
*---------------------------------------------------------------*
01

FILLER.
03 TABELA.
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
03 TABELA-R
REDEFINES
05 TAB-PROGRAMA

PIC X(08) VALUE


PIC X(08) VALUE
PIC X(08) VALUE
PIC X(08) VALUE
PIC X(08) VALUE
PIC X(08) VALUE
TABELA OCCURS 6
PIC X(08).

'CBCL1710'.
'CBCL1510'.
'CBCL2010'.
'CBCL1570'.
'CBCL1810'.
'CBCL1910'.
TIMES.

*----------------------------------------------------------------*
*
AREA DE PASSAGEM DE CONTROLE
*
*----------------------------------------------------------------*
01

COMU-AREA.
03 COMU-LL
03 COMU-ZZ
03 COMU-TRANCODE
03 COMU-SENHAS

PIC S9(04) COMP VALUE +64.


PIC 9(04) COMP VALUE ZEROS.
PIC X(15)
VALUE SPACES.
PIC X(37)
VALUE SPACES.

*----------------------------------------------------------------*
*
INCLUSAO DA POOL7100 - TRATA ERRO
*
*----------------------------------------------------------------*
-INC POL7100C

Pgina 36 de 70

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
* DEFINICAO DA AREA PARA RET-CODE DIFERENTES DE ZEROS(POOL0660) *
*----------------------------------------------------------------*
01

WRK-ERRO-POOL0660.
05 FILLER
PIC
'* RETURN-CODE DIFERENTE DE
05 FILLER
PIC
'* RET.COD = '.
05 WRK-RETURN-CODE
PIC
05 FILLER
PIC
'LOCAL = '.
05 WRK-LOCAL-ERRO
PIC

X(47)
VALUE
ZEROS NA POOL0660 *'.
X(12)
VALUE
9(02)BB.
X(08)

VALUE

9(02)

VALUE ZEROS.

*---------------------------------------------------------------*
*
DEFINICAO DE ATRIBUTOS
*
*---------------------------------------------------------------*
01

WRK-49369

PIC S9(008) COMP VALUE +49369.

*----------------------------------------------------------------*
*
AREAS DE MENSAGENS
*
*----------------------------------------------------------------*
01

WRK-MSG00021
'PF INVALIDA'.

PIC X(79) VALUE

01

WRK-MSG00032
PIC X(79) VALUE
'DIGITE A OPCAO DESEJADA E TECLE <ENTER>'.

01

WRK-MSG00041
'OPCAO INVALIDA'.

01

WRK-MSG00099
PIC X(79) VALUE
'OPCAO NAO DISPONIVEL NO MOMENTO'.

PIC X(79) VALUE

*----------------------------------------------------------------*
*
TELA CBCLT150 - INPUT
*
*----------------------------------------------------------------*
01

INPUT-T150.
03 FILLER
03 INP-PFK-T150
03 INP-SENHAS-T150
03 INP-NVOP-T150
03 INP-DATA-T150
03 INP-OPCAO-T150.
05 INP-OPCAO-T150-R

Pgina 37 de 70

PIC
PIC
PIC
PIC
PIC

X(18).
X(01).
X(37).
X(02).
X(10).

PIC

9(02).

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
*
TELA CBCLT150 - OUTPUT
*
*----------------------------------------------------------------*
01

OUTPUT-T150.
03 OUT-LL-T150
03 OUT-ZZ-T150
03 OUT-SENHAS-T150
03 OUT-NVOP-T150
03 OUT-DADOS-T150.
05 OUT-DATA-T150
05 OUT-OPCAO-ATTR-T150
05 OUT-OPCAO-T150.
07 OUT-OPCAO-T150-N
05 OUT-MENSAG-T150

PIC S9(04) COMP VALUE +136.


PIC S9(04) COMP VALUE +0.
PIC X(37).
PIC X(02).
PIC
PIC

X(10).
9(04) COMP.

PIC
PIC

9(02).
X(79).

*----------------------------------------------------------------*
* AREA DA POOL0660 COM MASCARA DA TELA CBCLT150 - SEGMENTO 00
*
*----------------------------------------------------------------*
01

660-CBCLT150.
03 660-LL-AREA-T150
03 660-LL-MENSAGEM-T150
03 660-SENHAS-T150
03 660-NVOP-T150
03 660-DATA-T150
03 660-OPCAO-T150
03 600-MENSAG-T150

PIC
PIC
PIC
PIC
PIC
PIC
PIC

9(04)
9(04)
9(04)
9(04)
9(04)
9(04)
9(04)

COMP
COMP
COMP
COMP
COMP
COMP
COMP

VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

0014.
0136.
0037.
1002.
0010.
2004.
0079.

*----------------------------------------------------------------*
LINKAGE SECTION.
*----------------------------------------------------------------*
01

01

IO-PCB.
03 IO-LTERM
03 FILLER
03 IO-STATUS
03 FILLER
03 IO-MODNAME

PIC
PIC
PIC
PIC
PIC

X(08).
X(02).
X(02).
X(12).
X(08).

ALT-PCB.
03 ALT-LTERM
03 FILLER
03 ALT-STATUS
03 FILLER
03 ALT-MODNAME

PIC
PIC
PIC
PIC
PIC

X(08).
X(02).
X(02).
X(12).
X(08).

Pgina 38 de 70

Curso de Programao Cobol - Online


*================================================================*
PROCEDURE DIVISION.
*================================================================*
ENTRY

'DLITCBL'

MOVE

WRK-GU

USING

IO-PCB ALT-PCB

TO

WRK-FUNCAO.

*----------------------------------------------------------------*
0000-OBTER-MENSAGEM SECTION.
*----------------------------------------------------------------*
CALL

'POOL5000'

USING

WRK-FUNCAO
IO-PCB
ALT-PCB
WRK-MENSAGEM
WRK-TELA
WRK-NOVA-OPCAO
WRK-COD-USER
WRK-OPCAO-ATUAL
WRK-COD-DEPTO.

IF

RETURN-CODE EQUAL 04 OR 12
GOBACK.

PERFORM 1000-PROCESSAR-MENSAGEM
GO

TO 0000-OBTER-MENSAGEM.

*----------------------------------------------------------------*
0000-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1000-PROCESSAR-MENSAGEM SECTION.
*----------------------------------------------------------------*
MOVE 'CBCLT150'
IF

TO

WRK-TELA

WRK-TRANSACAO
NOT EQUAL 'CBCL1500'
MOVE
WRK-MSG00032
TO
OUT-MENSAG-T150

ELSE

PERFORM 1100-PROCESSAR-CBCLT150.
IF

WRK-TELA
EQUAL 'CBCLT150'
PERFORM 1200-OBTER-DATA
PERFORM 1300-INSERIR-TELA.

*----------------------------------------------------------------*
1000-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT

Pgina 39 de 70

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
1100-PROCESSAR-CBCLT150 SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
IF

WRK-MENSAGEM
SPACES

TO
TO

INPUT-T150
OUT-DADOS-T150

IF

INP-OPCAO-T150
NOT EQUAL SPACES
INSPECT INP-OPCAO-T150 REPLACING LEADING ' ' BY '0'.
INP-PFK-T150
EQUAL '*'
MOVE INP-OPCAO-T150
TO
OUT-OPCAO-T150
MOVE WRK-MSG00021
TO
OUT-MENSAG-T150
GO
TO
1100-99-FIM.

IF

INP-PFK-T150
MOVE INP-OPCAO-T150
GO

EQUAL 'H'
TO
OUT-OPCAO-T150
TO
1100-99-FIM.

IF ((INP-OPCAO-T150
NOT NUMERIC
) OR
(INP-OPCAO-T150-R NOT EQUAL 01 AND 02 AND 03 AND
04 AND 05 AND 06
))
MOVE INP-OPCAO-T150
TO
OUT-OPCAO-T150
MOVE WRK-49369
TO
OUT-OPCAO-ATTR-T150
MOVE WRK-MSG00041
TO
OUT-MENSAG-T150
GO
TO
1100-99-FIM.
IF

(INP-OPCAO-T150-R NOT EQUAL


AND 04 AND 05 AND 06)
MOVE INP-OPCAO-T150
TO
MOVE WRK-49369
TO
MOVE WRK-MSG00099
TO
GO
TO

01 AND 02 AND 03
OUT-OPCAO-T150
OUT-OPCAO-ATTR-T150
OUT-MENSAG-T150
1100-99-FIM.

PERFORM 1110-PASSAR-CONTROLE.
*----------------------------------------------------------------*
1100-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1110-PASSAR-CONTROLE SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
MOVE
MOVE
MOVE

TAB-PROGRAMA (INP-OPCAO-T150-R)
INP-SENHAS-T150
'CBCL1500'
COMU-AREA
WRK-CHNG

TO
TO
TO
TO
TO

WRK-TELA
COMU-SENHAS
COMU-TRANCODE
WRK-MENSAGEM
WRK-FUNCAO.

*----------------------------------------------------------------*
1110-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT

Pgina 40 de 70

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
1200-OBTER-DATA SECTION.
*----------------------------------------------------------------*
CALL

'POOL7600'

USING DATA-HORA

MOVE
DT-AAAAMMDD
MOVE CORR WRK-AAAAMMDD-R
MOVE
WRK-DDMMAAAA-R

TO
TO
TO

WRK-AAAAMMDD
WRK-DDMMAAAA
OUT-DATA-T150.

*----------------------------------------------------------------*
1200-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
1300-INSERIR-TELA SECTION.
*----------------------------------------------------------------*
CALL

'POOL0660'

IF

RETURN-CODE
NOT EQUAL
MOVE
'APL'
TO
MOVE
RETURN-CODE
TO
MOVE
1
TO
MOVE
WRK-ERRO-POOL0660
TO
PERFORM 9999-ROTINA-ERRO.

MOVE
MOVE

USING

WRK-ISRT
OUTPUT-T150

OUTPUT-T150
660-CBCLT150
ZEROS
ERR-TIPO-ACESSO
WRK-RETURN-CODE
WRK-LOCAL-ERRO

TO
TO

ERR-TEXTO
WRK-FUNCAO
WRK-MENSAGEM.

*----------------------------------------------------------------*
1300-99-FIM. EXIT.
*----------------------------------------------------------------*
EJECT
*----------------------------------------------------------------*
9999-ROTINA-ERRO SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
MOVE
MOVE

'SENHAS02'
WRK-COD-USER
WRK-COD-DEPTO
'CBCL1500'

CALL

'POOL7100'

TO
TO
TO
TO

ERR-PGM
ERR-COD-USER
ERR-COD-DEPTO
ERR-MODULO

USING

IO-PCB
ERRO-AREA
ALT-PCB

GOBACK.
*----------------------------------------------------------------*
9999-99-FIM. EXIT.
*----------------------------------------------------------------*

Pgina 41 de 70

Curso de Programao Cobol - Online


Tratamento da mensagem de entrada
Quando o programa recebe a mensagem, deve ser verificado o campo TRANCODE, pois este
identifica se a mensagem veio da sua tela ou de outro programa.
No caso de a mensagem ter sido enviada por outro programa, deve-se efetuar um tratamento
de acordo. Para tanto, deve-se definir uma rea de comunicao. Esta dever ser definida de
acordo com o layout dos dados passados pelo programa chamador, e ser utilizada para receber
esta mensagem de entrada, para assim trabalharmos os campos necessrios.
No caso de a mensagem ter vindo da prpria tela, devemos carregar a rea definida para
recepo dos dados enviados pelo MID da tela.
Sistema Senhas do Bradesco
Para se trabalhar com programas on-line no ambiente Bradesco, se faz necessria a criao
de um campo chamado SENHAS com tamanho de 37 bytes. Este campo receber uma combinao
de caracteres nica garantindo assim o trnsito de mensagens pelo sistema.
Controle do fluxo de mensagens no programa pela POOL1000:
Para este controle utilizamos a POOL1000 (Cobol 1). Esta pool possui facilidades internas que
em alguns casos possibilitam tratamentos automticos.
Os programas que iro rodar no ambiente Bradesco, devem possuir um padro nas mensagens.
LL ZZ TRANCODE
SENHAS NOVA OPCAO DADOS
2
2
15
37
2
XX....
LL, ZZ e TRANCODE so campos padro do IMS.
TRANCODE : As 8 primeiras correspondem ao nome do programa a ser acionado pela PF. A 14
posio, indica a ativao/desativao da navegao automtica efetuada pelo campo NOVA
OPCAO (o controle desta navegao de exclusividade do sistema de Senhas). Quando em
branco, ativa seno desativa (usualmente, devemos definir com brancos esta posio). A 15
posio, indica a PF acionada, sendo esta posio alfanumrica.
PFs automticas: 3 ou 10 Menu opes da rotina (SENH7020);
5
Menu geral de rotinas
(SENH7010).
SENHAS: Dever ser definido em todas as telas como protegido, no disponvel, modificvel.
Este campo ser atualizado pela POOL1000, sendo transparente para o programa de aplicao.
Este campo extremamente importante e dever sempre ser mantido seu valor.
NOVA OPCAO : Tem a funo de trazer o valor da nova opo teclada na tela. Este campo,
quando valorizado na tela ser tratado automaticamente pela pool, efetuando uma navegao
para a opo correspondente no sistema.
DADOS
: Corresponde ao restante dos dados teclados/guardados na tela, a serem
tratados pelo programa.

Pgina 42 de 70

Curso de Programao Cobol - Online


Parmetros a serem passados para a POOL1000:
FUNCAO : Indica a funo a ser executada. X(04).
IO-PCB : Definida na Linkage
ALT-PCB: Definida na Linkage
MENSAGEM: Campo que conter a mensagem a ser enviada ou recebida. X(2000).
TELA: Conter o nome da tela ou transao de destino da mensagem. X(08).
NOVA OPCAO: Indica a nova opo de navegao. 9(02).
USURIO: Contm a identificao do usurio ativo na transao. X(07).
OPCAO ATUAL: Indica a opo teclada no menu. 9(02).
DEPARTAMENTO:

Bytes 1 e 2: reserva.
Bytes de 3 a 6: Indica o departamento do usurio.

BANCO: Indica a qual Banco o usurio pertence. 9(05).


Obs.: Os campos em negrito so opcionais.
Funcionamento da POOL1000:
A POOL1000 tem como caracterstica principal a automatizao das funes comuns de
leitura e envio de mensagens do IMS. A princpio executada a funo solicitada atravs do
campo FUNO. Conforme a funo solicitada executada automaticamente uma outra funo
que corresponde a uma seqncia lgica. Por exemplo:
-

Funo Solicitada = GU.


Executa a leitura de uma nova mensagem.

Funo Solicitada = ISRT.


Aps a execuo do ISRT, a POOL1000 volta a ler outra mensagem
automaticamente, no sendo necessrio ao programa chamador executar tal
funo.

Funo Solicitada = CHNG.


A POOL1000 executa os seguintes comandos:
. CNHG- Seleciona o novo destino (solicitado)
. ISRT
- Insere mensagem para novo destino (automtico)
. GU
- Volta a ler outra mensagem na fila.

Pgina 43 de 70

Curso de Programao Cobol - Online


Com relao ao STATUS-CODES do IMS e as telas de erros decorrentes, no necessrio
nenhum teste ou codificao dentro do programa chamador, sendo tudo feito automaticamente
pela POOL1000. Do ponto de vista de estrutura do programa, a chamada a POOL1000 deve ser
codificada uma s vez e no incio do programa, no local onde se codificaria o CALL GU do IMS.
Controle do fluxo de mensagens no programa pela POOL1000 (Verso 02):
Para este controle utilizamos a POOL1000 Verso 02 (Cobol 1). Esta pool possui facilidades
internas que em alguns casos possibilitam tratamentos automticos.
A diferena desta verso para a outra POOL1000, que poderemos digitar comandos numa
linha especfica da tela, ao invs de nos utilizarmos de PFS.
Os programas que iro rodar no ambiente Bradesco, devem possuir um padro nas mensagens.
LL ZZ TRANCODE
SENHAS
LINHA DE
DADOS
COMANDO
2
2
15
37
68
XX....
LL, ZZ e TRANCODE so campos padro do IMS.
TRANCODE : As 8 primeiras correspondem ao nome do programa a ser acionado pela PF. A 15
posio, indica a PF acionada, sendo esta posio alfanumrica.
PFs automticas: 3 ou 10 Menu opes da rotina (SENH7020);
5
Menu geral de rotinas
(SENH7010).
SENHAS: Dever ser definido em todas as telas como protegido, no disponvel, modificvel.
Este campo ser atualizado pela POOL1000, sendo transparente para o programa de aplicao.
Este campo extremamente importante e dever sempre ser mantido seu valor.
LINHA DE COMANDO : Este campo dever ser definido em todas as telas, com a funo de
permitir ao usurio teclar comandos de navegao, PFS ou aes a serem executadas
internamente no programa.
DADOS
: Corresponde ao restante dos dados teclados/guardados na tela, a serem
tratados pelo programa.

Parmetros a serem passados para a POOL1000 (Verso 002):


VERSO : Este campo dever ser valorizado com VRS002. X(06).

Pgina 44 de 70

Curso de Programao Cobol - Online


FUNCAO : Indica a funo a ser executada. X(04).
IO-PCB : Definida na Linkage
ALT-PCB: Definida na Linkage
MENSAGEM: Campo que conter a mensagem a ser enviada ou recebida. X(2000).
TELA: Conter o nome da tela ou transao de destino da mensagem. X(08).
USURIO: Contm a identificao do usurio ativo na transao. X(07).
DEPARTAMENTO:

Bytes 1 e 2: reserva.
Bytes de 3 a 6: Indica o departamento do usurio.

BANCO: Indica a qual Banco o usurio pertence. 9(05).


Obs.: Os campos em negrito so opcionais.
Funcionamento da POOL1000 Verso 002:
A POOL1000 Verso 002 tem como caracterstica principal a automatizao das funes
comuns de leitura e envio de mensagens do IMS. A princpio executada a funo solicitada
atravs do campo FUNO. Conforme a funo solicitada executada automaticamente uma
outra funo que corresponde a uma seqncia lgica. Por exemplo:
-

Funo Solicitada = GU.


Executa a leitura de uma nova mensagem.

Funo Solicitada = ISRT.


Aps a execuo do ISRT, a POOL1000 Verso 002 volta a ler outra
mensagem automaticamente, no sendo necessrio ao programa chamador
executar tal funo.

Funo Solicitada = CHNG.


A POOL1000 Verso 002 executa os seguintes comandos:
. CNHG- Seleciona o novo destino (solicitado)
. ISRT
- Insere mensagem para novo destino (automtico)
. GU
- Volta a ler outra mensagem na fila.

Com relao ao STATUS-CODES do IMS e as telas de erros decorrentes, no necessrio


nenhum teste ou codificao dentro do programa chamador, sendo tudo feito automaticamente
pela POOL1000 Verso 002. Do ponto de vista de estrutura do programa, a chamada a
POOL1000 Verso 002 deve ser codificada uma s vez e no incio do programa, no local onde se
codificaria o CALL GU do IMS.

Controle do fluxo de mensagens no programa pela POOL5000:

Pgina 45 de 70

Curso de Programao Cobol - Online


Para este controle utilizamos a POOL5000, que deve ser utilizada em programas
desenvolvidos em COBOL II em vez da POOL1000. Este mdulo uma cpia da POOL1000
(existindo tambm cpia para a Verso 002). Os parmetros a serem passados so os mesmos,
tanto para a verso anterior quanto para a Verso 002 deste mdulo. A nica diferena que
deve-se verificar se o RETURN-CODE retornado pela POOL5000 igual a 04 ou 12. Caso seja
igual, deve-se utilizar o comando GOBACK.
Processamento de Fases
Na maioria dos programas on-line, o processamento dividido em fases. Estas fases
determinam diferentes tipos de processamento a serem executados em um programa. Quando
um programa possui vrias fases, devemos criar um campo FASE escondido na tela para que
possamos nos localizar dentro do programa.
Exemplo de fases:
Fase 0 : Recebimento de controle
Fase 1 : Consistncias
Fase 2 : Confirmao
Funcionamento:
Rotina
Principal
1
Call
POOL5000

Inicializa
reas

Processa
Tela 1
S

Enviar
Tela
N

Trata
Fase 1

Trata
Fase 2

Trata PF
E Enter

Trata PF
E Enter

1 Looping Incondicional
2 Fase 1

Pgina 46 de 70

Curso de Programao Cobol - Online


Processamento de Varias Telas
Um programa pode receber mensagens de varias telas, cada uma com um formato de
mensagem e tratamento diferentes no programa.
Para sabermos se recebemos controle de uma tela de nosso programa basta verificar o
TRANCODE. No caso do trancode ser igual ao nome do nosso programa, isto significa que uma
das telas do programa esta enviando a rea de mensagem. Para sabermos de qual tela, basta
verificarmos o IO-MODNAME da IO-PCB que conter o nome da tela.
Em um caso desse, deveremos separar o tratamento das telas no programa a fim de facilitar
o trabalho e manuteno do mesmo.
Exemplo:
Rotina
Principal
S

N
1

Call
POOL5000

Inicializa
reas

Recebe
Controle

Processa
Telas
S

Enviar
Tela

Processa
Tela 1

Processa
Tela 2

4
S
Processa
Fase 1

Trata PF
E Enter

4
N

Processa
Fase 2

Processa
Fase 1

Processa
Fase 2

Trata PF
E Enter

Trata PF
E Enter

Trata PF
E Enter

1 Looping Incondicional
2 Trancode diferente do nome do programa
3 IO-MODNAME = Tela 1
4 Fase = 1

Avano e Retrocesso de Telas (PF7/PF8)


Como os programas IMS vieram para substituir vrios relatrios, geralmente temos dados que
devem ser mostrados em mais de uma tela ao usurio.
Para que isto ocorra, devemos ter tambm o conceito de paginao, ou seja a rolagem dos
dados da tela para frente (avano de pgina) ou para trs (retrocesso de pgina).

Pgina 47 de 70

Curso de Programao Cobol - Online


Basicamente podemos executar este processo de duas formas (ambas chamadas de restart):
-

Restart Direto:
Efetuamos este tipo de restart, quando temos os campos mostrados na tela
ordenados por alguma chave nica constante da tabela.
Para que possamos efetuar este tipo de restart devemos manter em campos
escondidos na tela, a chave da primeira ocorrncia da tela atual (para
efetuarmos o retrocesso), a chave da primeira ocorrncia da tela posterior
(para efetuarmos o avano de pgina), um campo de controle informando se
primeira pgina e um campo de controle informando se ltima pgina.
Com os dados guardados da tela, trabalharemos com cursores (DB2)
separados, um tratando o retrocesso e o outro tratando o avano de paginas.

Restart desprezando ocorrncias :


Efetuamos este tipo de restart, quando no possumos uma chave nica ou os
campos mostrados na tela, no possuem uma ordenao por esta chave nica.
Este tipo de restart, mais simples pois devemos apenas guardar o nmero
da pgina atual.
Para efetuarmos o retrocesso, apenas subtramos 02 da pgina atual,
multiplicamos pelo nmero de ocorrncias da tela e teremos a quantidade de
registros da tabela DB2 a serem desprezados para formatao das
ocorrncias da tela anterior.
Para efetuarmos o avano da pgina, apenas multiplicamos o nmero da pgina
atual e teremos a quantidade de registros da tabela DB2 a serem
desprezados para formatao das ocorrncias da prxima pgina.
OBS: Este tipo de restart pode degradar a performance do programa, a
medida que se avana/retrocede pginas, pois a cada momento deveremos
ler a tabela DB2 desde o incio at a ocorrncia desejada.

Sistema de Help de Telas


Muitas vezes nas telas demonstradas ao usurio, existem campos que so obrigatrios ou tem
algum preenchimento especfico. Para demonstrar estes tipos de informaes aos usurios, foi
criado no ambiente Bradesco, um sistema de Help nico.
Este sistema, consiste basicamente em informar ao usurio as informaes inerentes ao
preenchimento e entendimento dos diversos campos que existem nas telas, como por exemplo,
quais so obrigatrios, quais tem contedo especfico, qual o seu significado, etc.
Neste curso, no iremos entrar no conceito de como estas informaes so montadas e
carregadas no sistema de help e sim criar os meios para que possamos apenas demonstrar ao
usurio final as informaes inerentes aos mesmos.
Atualmente, o programa que realiza o controle do que deve ser mostrado ao usurio o
programa HELP6100.
Este programa dever ser acionado, atravs da tela em que o usurio est trabalhando, para
isto apenas deveremos apenas colocar na definio da PF que representa o help, a seguinte
codificao (atualmente a PF01 utilizada para o help):

XXT000 FMT
DEV TYPE=(3270,2),FEAT=IGNORE,SYSMSG=MENSAG,DSCA=X'00A0',

Pgina 48 de 70

Curso de Programao Cobol - Online


PFK=(PF,01='HELP6100 NNNN ',02='/RCL

.',

Com isto, estaremos informando ao IMS, qual o programa a ser chamado (HELP6100) e
tambm mais um contedo (NNNN), que a identificao do programa que chamou o sistema de
help. Esta informao ser utilizada pelo sistema de help para identificar qual foi o programa que
chamou a ele, e posteriormente, devolver-lhe o controle.
Estas informaes, sero passadas como uma mensagem normal de tela, ou seja, todos os
campos definidos no MID da tela tambm iro e sero guardados pelo sistema de help.
Outro alterao que devemos efetuar, se refere ao retorno da tela do sistema de help, pois
aps ter consultado as informaes desejadas, o usurio tem de retornar a sua tela original para
continuar trabalhando.
O tratamento deste retorno, se faz com alteraes no programa chamador e no na tela, pois
o sistema de help retornar ao programa indicado na definio da pf de help, como descrito
acima.
Estas alteraes consistem basicamente no retorno das informaes que se encontravam na
tela anteriormente ao acionamento da pf de help, inclusive com seus atributos.
As informaes retornadas ao programa chamador estaro formatadas como se fosse sido
teclada alguma pf ou enter diretamente na tela principal. Devido a isto, utilizamos em nosso
programa a mesma rea de input da tela principal para receber os dados retornados do sistema
de help.
Como recebemos nesta mesma rea de input, poderemos identificar que ocorreu o retorno do
help verificando se o contedo do campo pf est com H.
Caso esteja, deveremos apenas movimentar os campos de input para os campos de output da
tela.
Porm, temos um pequeno problema. O IMS no navega os atributos que estavam na tela
original quando foi acionado o help.
Para sanarmos isto, foi adotado um padro interno na , que consiste dos seguintes
procedimentos:
- Dever ser definida uma tabela interna para os atributos utilizados no
programa (geralmente no sero utilizados mais que nove atributos
diferentes);
- Dever ser definido um campo protegido, modificvel e invisvel na tela que
ir armazenar um valor que representar o atributo atual de cada campo da
tela que pode ter o atributo original alterado. O tamanho deste campo se
dar pela quantidade de campos da tela que podem ter seu atributo alterado,
pois cada um representar um byte do campo escondido;
No programa, quando estivermos alterando um atributo de algum campo da
tela, deveremos carregar qual a posio deste atributo na tabela interna, pois
ele servir de indexador no processo de remontagem da tela quando do
retorno do help;
- Quando retornamos do help e efetuamos a remontagem da tela, apenas
moveremos o atributo indexado do contedo do campo escondido (relativo ao
campo da tela que estamos tratando).
Com isto, retornaremos a tela exatamente como se encontrava quando do acionamento da pf
de help.

Pgina 49 de 70

Curso de Programao Cobol - Online


Impresso de Dados
Algumas vezes, o usurio necessita que os dados mostrados em tela sejam impressos, para
tanto, o IMS providencia tambm comunicao com outros meios de visualizao de dados, como
por exemplo, impressoras.
O processo de impresso se d no ambiente Bradesco, atravs de um programa separado do
programa principal que mostra a tela no terminal.
Este programa usualmente chamado de mdulo de impresso e acionado pelo programa
principal atravs de um CALL normal (como das pools) e no da funo CNHG/ISRT, quando o
usurio tecla a pf relativa a impresso na tela do terminal.
A razo pela qual realizamos um CALL que temos que devolver ao usurio em seu terminal um
resultado da impresso como por exemplo, se foi o.k. ou se deu algum erro. Quem contm o
endereo deste terminal ativo a IO-PCB, que alterada quando se passa o controle para outro
programa via funo CHNG/ISRT.
Este mdulo de impresso difere do programa principal, no apenas por se utilizar de um meio
fsico diferente para mostrar os dados (impressora), mas tambm porque este meio fsico
contm limitaes que devem ser levadas em conta.
Para que possamos nos utilizar deste tipo de modulo devemos levar em considerao que a
rea do MOD da tela de impresso poder ser dividida em 2 segmentos. Isso ocorre devido ao
limite mximo de 2300 bytes pr segmento exigido pelo IMS. Como teremos mais de um
segmento, teremos ento mais de uma output e rea da POOL0660 (uma para cada segmento).
No caso da definio das reas da POOL0660, importante que o primeiro byte de cada campo
que compe a output, seja valorizado com 1.
Como este programa um modulo o recebimento das informaes passadas pelo chamador se
dar atravs da linkage section, portando deveremos utilizar o parmetro USING na procedure
division.
O importante que devemos nos utilizar da mesma ordem e tamanho dos parmetros
passados e recebidos. Geralmente, transmitimos e recebemos a IO-PCB, ALT-PCB e uma COMUAREA (que contm os dados necessrios ao trabalho do mdulo).
Geralmente, esta COMU-AREA se utiliza dos seguintes campos:
Cdigo de Retorno
PIC 9(01). *
Wrk-impressora
PIC X(08). **
Pagina
PIC 9(04). ***
Dados de acesso s tabelas a serem impressos os dados.

* Geralmente os valores possveis deste campo significam:


( 0 Impresso OK;
1 Impressora indisponvel;
2 Restart;
3 Erro POOL7100 )

Pgina 50 de 70

Curso de Programao Cobol - Online


** Nome da impressora, que buscado no programa chamador atravs da POOL1080.
*** Se a impresso no for do tipo PRINT SCREEN, este campo se faz necessrio para o
processo de Restart.

Pgina 51 de 70

Curso de Programao Cobol - Online


Funcionamento geral de um mdulo de impresso:
Limpar Cdigo de retorno
Calcular WRK-DESPREZA = PAGINA * NRO DE OCORRENCIAS
Verificar a disponibilidade da impressora
CALL CBLTDLI USING WRK-CHNG ALT-PCB WRK-IMPRESSORA
Se ALT-STATUS = A1
Impressora Indisponvel
Mover 1 para Cdigo de retorno
Seno
Se ALT-STATUS diferente de SPACES
Mover IMS para ERR-TIPO-ACESSO ( inc da POOL7100)
Chamar a POOL7100
Fim-se
Fim-se
Se cdigo de retorno igual a zero
Montar Tela de Impresso
Fim-se
Goback.
No processo de Montar Tela de Impresso, deve-se imprimir sempre no mximo 4
paginas, sendo que cada pagina possui 2 segmentos como visto anteriormente.
No caso de j haver sido impresso 4 paginas e ter mais registros a serem
impressos, isso caracterizar RESTART, ou seja, valorizar o campo PAGINA da rea de
comunicao com a ultima pagina impressa, mover 2 para o cdigo de retorno sair deste processo.
Quando da chamada da POOL7100, mover 3 para o cdigo de retorno, indicando
erro ao acesso a base de dados ou do IMS.
Obs.: Se o programa prever Restart e existir acumuladores que no podero perder seus valores,
estes devem estar na Comu-Area e inclusive estar escondidos na tela do Chamador, com
o mesmo tratamento da pagina.

Pgina 52 de 70

Curso de Programao Cobol - Online


Exemplo grfico de funcionamento:

Chamador

PF4
Mdulo de
Impresso

PAGINA 1
ContParm = 4
Fazer Item 1

PAGINA 2
ContParm = 3
Fazer Item 1

PAGINA 3
ContParm = 3
Fazer Item 1

PAGINA 4
ContParm = 3
Fazer Item 1

Se tem mais registros (RESTART)


salvar a ultima pagina na rea de comunicao e
mover 2 para cdigo de retorno.
Seno
Zerar a pagina na rea de comunicao e
mover 0 para cdigo de retorno.
Fim-se
Devolver controle para o Chamador.

Pgina 53 de 70

Curso de Programao Cobol - Online


Item 1:
1 Chamar a POOL0660 usando a OUTPUT e rea da 660 do 1 SEG
2 Chamar a POOL0660 usando a OUTPUT e rea da 660 do 2 SEG
3 Usar o seguinte comando para inserir o 1 SEG
CALL CBLTDLI USING ContParm
WRK-ISRT
ALT-PCB
OUTPUT do 1 SEG
WRK-TELA (Tela de Impresso)
4 Usar o seguinte comando para inserir o 2 SEG
CALL CBLTDLI USING WRK-ISRT
ALT-PCB
OUTPUT do 2 SEG
5 Limpar as ocorrncias dos dois SEGs.

Pgina 54 de 70

Curso de Programao Cobol - Online


Exemplo de Tela de Impresso:
*---------------------------------------------------------------------*
*
*
*---------------------------------------------------------------------*
*
TELA.................: CURSP999
*
*
PROGRAMA.............: CURS9999
*
*
PROGRAMADOR..........:
*
*
ANALISTA.............:
*
*
DATA.................:
*
*
OBJETIVO.............: IMPRESSAO DE RELATORIO DE PRODUTOS
*
*---------------------------------------------------------------------*
PRINT NOGEN
RSP999
FMT
DEV
TYPE=(3270P,2),FEAT=IGNORE,PAGE=(66,SPACE)
STACK ON
*---------------------------------------------------------------------*
*
D I F / D O F
*
*---------------------------------------------------------------------*
DIV
TYPE=OUTPUT
*---------------------------------------------------------------------*
*
LINHA 01
*
*---------------------------------------------------------------------*
DATA
DFLD POS=(01,02),LTH=10
DFLD 'RELATORIO DE PRODUTOS CADASTRADOS',POS=(01,23)
HORA
DFLD POS=(01,73),LTH=08
*---------------------------------------------------------------------*
*
LINHA 02
*
*---------------------------------------------------------------------*
DFLD 'CURSP999',POS=(02,02)
DFLD 'TELA DE IMPRESSAO',POS=(02,32)
DFLD 'CURS9999',POS=(02,73)
*---------------------------------------------------------------------*
*
LINHA 03
*
*---------------------------------------------------------------------*
DFLD 'PAG.',POS=(03,73)
PAGINA
DFLD POS=(03,78),LTH=03
*---------------------------------------------------------------------*
*
LINHA 06
*
*---------------------------------------------------------------------*
DFLD 'BANCO:',POS=(06,02)
BANCO
DFLD POS=(06,09),LTH=05
DFLD 'AG.:',POS=(06,15)
AGENC
DFLD POS=(06,20),LTH=05
DFLD '-',POS=(06,26)
DGAGE
DFLD POS=(06,28),LTH=01
DFLD 'CTA.:',POS=(06,30)
CONTA
DFLD POS=(06,36),LTH=13
DFLD '/',POS=(06,50)
DGCTA
DFLD POS=(06,52),LTH=02
DFLD 'NOME',POS=(06,56)
NOME
DFLD POS=(06,61),LTH=20
*---------------------------------------------------------------------*
*
LINHA 07
*
*---------------------------------------------------------------------*
DFLD '-------------------------------------------------------X
------------------------',POS=(07,02)
*---------------------------------------------------------------------*
*
LINHA 09
*
*---------------------------------------------------------------------*
DFLD 'COD.PRODUTO',POS=(09,13)
DFLD 'DESCRICAO',POS=(09,29)

Pgina 55 de 70

Curso de Programao Cobol - Online


*---------------------------------------------------------------------*
*
LINHA 11 A 35
*
*---------------------------------------------------------------------*
DO
25
DET1
DFLD POS=(11,17),LTH=57
ENDDO
*---------------------------------------------------------------------*
*
LINHA 36 A 60
*
*---------------------------------------------------------------------*
DO
25
DET2
DFLD POS=(36,17),LTH=57
ENDDO
*---------------------------------------------------------------------*
STACK OFF
DEV
TYPE=SCS1,FEAT=IGNORE,PAGE=(66,SPACE)
UNSTACK
FMTEND
*---------------------------------------------------------------------*
*
M O D
*
*---------------------------------------------------------------------*
CURSP999 MSG
TYPE=OUTPUT,SOR=(RSP999,IGNORE),OPT=1
SEG
MFLD (DATA,DATE3Y4)
MFLD (HORA,TIME)
MFLD PAGINA,LTH=03
MFLD BANCO,LTH=05
MFLD AGENC,LTH=05
MFLD DGAGE,LTH=01
MFLD CONTA,LTH=13
MFLD DGCTA,LTH=02
MFLD NOME,LTH=20
DO
25
MFLD DET1,LTH=57
ENDDO
SEG
DO
25
MFLD DET2,LTH=57
ENDDO
MSGEND
END

Programa Exemplo:
*---------------------------------------------------------------*
IDENTIFICATION DIVISION.
*---------------------------------------------------------------*
PROGRAM-ID. CURS9999.
AUTHOR.
XXXXXX.
*---------------------------------------------------------------*
*
*
*---------------------------------------------------------------*
*
*
*
PROGRAMA
: CURS9999
*
*
PROGRAMADOR :
*
*
ANALISTA
:
*
*
DATA
:
*
*
*
*
OBJETIVO
: RELACAO DOS PRODUTOS CADASTRADOS
*
*
*
*---------------------------------------------------------------*

Pgina 56 de 70

Curso de Programao Cobol - Online


*---------------------------------------------------------------*
ENVIRONMENT DIVISION.
*---------------------------------------------------------------*
*---------------------------------------------------------------*
CONFIGURATION SECTION.
*---------------------------------------------------------------*
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*---------------------------------------------------------------*
DATA DIVISION.
*---------------------------------------------------------------*
*---------------------------------------------------------------*
WORKING-STORAGE SECTION.
*---------------------------------------------------------------*
77
77
77
77
77
77
77
77
77
77
77
77
77

WRK-ISRT
WRK-CHNG
WRK-CONTPARM
WRK-MODNAME
WRK-IND
WRK-IND1
WRK-PAGINA
WRK-MODULO
WRK-FIM-C1
WRK-DESPREZA
WRK-0430-AGENCIA
WRK-0430-DIGITO
WRK-PAGINA-EDIT

PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC

X(04)
VALUE 'ISRT'.
X(04)
VALUE 'CHNG'.
9(05) COMP VALUE ZEROS.
X(08)
VALUE SPACES.
9(09)
VALUE ZEROS.
9(09)
VALUE ZEROS.
9(05)
VALUE ZEROS.
X(08)
VALUE SPACES.
X(01)
VALUE SPACES.
9(09)
VALUE ZEROS.
9(15)
VALUE ZEROS.
X(01)
VALUE SPACES.
999.

01

WRK-AUX-CONTA.
03 FILLER
03 WRK-CONTA

PIC
PIC

X(17)
9(13)

VALUE ZEROS.
VALUE ZEROS.

WRK-0428-AREA.
03 WRK-0428-VERSAO
03 WRK-0428-MENSAGEM
03 WRK-0428-BANCO
03 WRK-0428-AGENCIA
03 WRK-0428-DIG-AGENCIA
03 WRK-0428-CONTA
03 WRK-0428-DIG-CONTA

PIC
PIC
PIC
PIC
PIC
PIC
PIC

X(06)
X(83)
9(05)
9(05)
X(02)
X(30)
X(02)

VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

WRK-DETALHE.
03 WRK-DET-PRODUTO
03 FILLER
03 WRK-DET-DESCRICAO

PIC
PIC
PIC

9(05)
X(07)
X(45)

01

01

SPACES.
SPACES.
ZEROS.
ZEROS.
SPACES.
SPACES.
SPACES.

VALUE ZEROS.
VALUE SPACES.
VALUE SPACES.

*---------------------------------------------------------------*
*
AREA USADA PARA COMUNICACAO COM O MODULO CLIB1000
*
*---------------------------------------------------------------*
01

WRK-CLIB-AREA-ENTRADA.
03 WRK-CLIB-TRANSACAO
03 WRK-CLIB-VERSAO
03 WRK-CLIB-PRODUTO
03 WRK-CLIB-AREA-TRABALHO.
05 WRK-CLIB-BANCO
05 WRK-CLIB-AGENCIA
05 WRK-CLIB-CONTA
05 WRK-CLIB-FILLER

PIC
PIC
PIC

9(05) COMP-3 VALUE ZEROS.


X(06)
VALUE SPACES.
9(05) COMP-3 VALUE ZEROS.

PIC
PIC
PIC
PIC

9(05) COMP-3 VALUE ZEROS.


9(05) COMP-3 VALUE ZEROS.
9(13) COMP-3 VALUE ZEROS.
X(95)
VALUE SPACES.

Pgina 57 de 70

Curso de Programao Cobol - Online


01

WRK-CLIB-AREA-SAIDA.
03 WRK-CLIB-COD-RETORNO
PIC
03 WRK-CLIB-MENSAGEM-SAIDA PIC

9(03) COMP-3 VALUE ZEROS.


X(998)
VALUE SPACES.

-INC I#CLIB20
*---------------------------------------------------------------*
*** DEFINICAO DA AREA PARA RET-CODE DIFERENTES DE ZEROS(POOL0660)
*---------------------------------------------------------------*
01

WRK-ERRO-POOL0660.
03 FILLER
PIC X(47)
VALUE
'* RETURN-CODE DIFERENTE DE ZEROS NA POOL0660 *'.
03 FILLER
PIC X(12)
VALUE
'* RET.COD = '.
03 WRK-RETURN-CODE
PIC 9(02)BB.
03 FILLER
PIC X(08)
VALUE
'LOCAL = '.
03 WRK-LOCAL-ERRO
PIC 9(02)
VALUE ZEROS.

*---------------------------------------------------------------*
*
TELA CURSP999
- SEGMENTO 00 - OUTPUT
*
*---------------------------------------------------------------*
01

OUTPUT-P999-SEG00.
03 OUT-LL-P999
03 OUT-ZZ-P999
03 OUT-DADOS-P999.
05 OUT-PAGINA-P999
05 OUT-BANCO-P999
05 OUT-AGENC-P999
05 OUT-DGAGE-P999
05 OUT-CONTA-P999
05 OUT-DGCTA-P999
05 OUT-NOME-P999
05 OUT-SEG00-P999.
07 OUT-TABELA-P999
09 OUT-DET1-P999

PIC S9(04) COMP VALUE +1478.


PIC 9(04) COMP VALUE 0.
PIC
PIC
PIC
PIC
PIC
PIC
PIC

X(03).
X(05).
X(05).
X(01).
X(13).
X(02).
X(20).

OCCURS 25 TIMES.
PIC X(57).

*---------------------------------------------------------------*
*
TELA CURSP999
- SEGMENTO 01 - OUTPUT
*
*---------------------------------------------------------------*
01

OUTPUT-P999-SEG01.
03 OUT-LL-P999
03 OUT-ZZ-P999
03 OUT-SEG01-P999.
05 OUT-TABELA1-P999
07 OUT-DET2-P999

PIC S9(04) COMP VALUE +1429.


PIC 9(04) COMP VALUE 0.
OCCURS 25 TIMES.
PIC X(57).

Pgina 58 de 70

Curso de Programao Cobol - Online


*---------------------------------------------------------------*
*
AREA DA POOL0660 COM MASCARA DA TELA CURSP999 - SEGMENTO 00 *
*---------------------------------------------------------------*
01

660-CURSP999-SEG00.
03 660-LL-AREA-P999
03 660-LL-MENSAGEM-P999
03 660-PAGINA-P999
03 660-BANCO-P999
03 660-AGENC-P999
03 660-DGAGE-P999
03 660-CONTA-P999
03 660-DGCTA-P999
03 660-NOME-P999
03 660-TABELA-SEG00-P999
05 660-DET1-P999

PIC 9(04) COMP VALUE


PIC 9(04) COMP VALUE
PIC 9(04) COMP VALUE
PIC 9(04) COMP VALUE
PIC 9(04) COMP VALUE
PIC 9(04) COMP VALUE
PIC 9(04) COMP VALUE
PIC 9(04) COMP VALUE
PIC 9(04) COMP VALUE
OCCURS 25 TIMES.
PIC 9(04) COMP VALUE

0068.
1478.
1003.
1005.
1005.
1001.
1013.
1002.
1020.
1057.

*---------------------------------------------------------------*
*
AREA DA POOL0660 COM MASCARA DA TELA CURSP999 - SEGMENTO 01 *
*---------------------------------------------------------------*
01

660-CURSP999-SEG01.
03 660-LL-AREA-P999
03 660-LL-MENSAGEM-P999
03 660-TABELA-SEG01-P999
05 660-DET2-P999

PIC 9(04)
PIC 9(04)
OCCURS 25
PIC 9(04)

COMP VALUE 0054.


COMP VALUE 1429.
TIMES.
COMP VALUE 1057.

*----------------------------------------------------------------*
*
INCLUSAO DA POOL7100 - TRATA ERRO
*
*----------------------------------------------------------------*
-INC POL7100C
*----------------------------------------------------------------*
*
TABELAS DB2
*
*----------------------------------------------------------------*
EXEC SQL
INCLUDE
END-EXEC.

SQLCA

EXEC SQL
INCLUDE
END-EXEC.

CURSB038

EXEC SQL
INCLUDE
END-EXEC.

CEFIB014

EXEC SQL
DECLARE C1 CURSOR FOR
SELECT A.CPRODT_CURSS_CLI,
B.IFUNDO_CURSS
FROM DB2PRD.CAD_CLI_CTCIA
DB2PRD.FUNDO_CURSS
WHERE A.CBCO
=
AND A.CAG_BCRIA
=
AND A.CCTA_BCRIA_CLI
=
AND A.CPRODT_CURSS_CLI =
ORDER BY A.CPRODT_CURSS_CLI
END-EXEC.

A,
B
:CURSB038.CBCO
:CURSB038.CAG-BCRIA
:CURSB038.CCTA-BCRIA-CLI
B.CFUNDO_CURSS

Pgina 59 de 70

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
LINKAGE SECTION.
*----------------------------------------------------------------*
01

01

01

IO-PCB.
03 IO-LTERM
03 FILLER
03 IO-STATUS
03 FILLER
03 IO-MODNAME

PIC
PIC
PIC
PIC
PIC

X(08).
X(02).
X(02).
X(12).
X(08).

ALT-PCB.
03 ALT-LTERM
03 FILLER
03 ALT-STATUS
03 FILLER
03 ALT-MODNAME

PIC
PIC
PIC
PIC
PIC

X(08).
X(02).
X(02).
X(12).
X(08).

WRK-IMP-AREA.
03 WRK-IMP-COD-RETORNO
03 WRK-IMP-IMPRESSORA
03 WRK-IMP-USUARIO-SENHAS
03 WRK-IMP-DEPTO-SENHAS
03 WRK-IMP-PAGINA
03 WRK-IMP-BANCO
03 WRK-IMP-AGENCIA
03 WRK-IMP-CONTA-CORRENTE
03 WRK-IMP-PRODUTO
03 WRK-IMP-DATA-MOVTO

PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC

9(01).
X(08).
X(07).
X(06).
9(04).
9(05).
9(05).
9(13).
9(05).
X(10).

*----------------------------------------------------------------*
PROCEDURE DIVISION USING IO-PCB ALT-PCB WRK-IMP-AREA.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
000000-INICIAR SECTION.
*----------------------------------------------------------------*
MOVE ZEROS
COMPUTE WRK-DESPREZA
PERFORM
IF

TO WRK-IMP-COD-RETORNO
= WRK-IMP-PAGINA * 50.

100000-VERIFICAR-IMPRESSORA.

WRK-IMP-COD-RETORNO
EQUAL ZEROS
PERFORM 200000-ROTINA-PRINCIPAL.

GOBACK.
*----------------------------------------------------------------*
000000-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
100000-VERIFICAR-IMPRESSORA SECTION.
*----------------------------------------------------------------*
CALL 'CBLTDLI'

USING WRK-CHNG
ALT-PCB
WRK-IMP-IMPRESSORA.

IF

EQUAL 'A1'
TO WRK-IMP-COD-RETORNO

ALT-STATUS
MOVE 1

ELSE

Pgina 60 de 70

Curso de Programao Cobol - Online


IF

ALT-STATUS
NOT EQUAL SPACES
MOVE 'IMS'
TO ERR-TIPO-ACESSO
MOVE WRK-IMP-IMPRESSORA TO ERR-DBD-TAB
MOVE WRK-CHNG
TO ERR-FUN-COMANDO
MOVE ALT-STATUS
TO ERR-STA-CODE
MOVE '0001'
TO ERR-LOCAL
MOVE SPACES
TO ERR-SEGM
PERFORM 999999-ROTINA-ERRO.

*----------------------------------------------------------------*
100000-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
200000-ROTINA-PRINCIPAL SECTION.
*----------------------------------------------------------------*
PERFORM

210000-OBTER-DIG-AGENCIA

PERFORM

220000-OBTER-DIG-CONTA

PERFORM

230000-OBTER-NOME

MOVE
MOVE
MOVE
MOVE
MOVE
MOVE

WRK-IMP-BANCO
WRK-IMP-AGENCIA
WRK-0430-DIGITO
WRK-IMP-CONTA-CORRENTE
WRK-0428-DIG-CONTA
NOME

PERFORM

TO
TO
TO
TO
TO
TO

OUT-BANCO-P999
OUT-AGENC-P999
OUT-DGAGE-P999
OUT-CONTA-P999
OUT-DGCTA-P999
OUT-NOME-P999

240000-MONTAR-TELA.

*----------------------------------------------------------------*
100000-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
210000-OBTER-DIG-AGENCIA SECTION.
*----------------------------------------------------------------*
MOVE WRK-IMP-AGENCIA
MOVE SPACES

TO WRK-0430-AGENCIA
TO WRK-0430-DIGITO

CALL 'POOL0430'

USING WRK-0430-AGENCIA
WRK-0430-DIGITO

IF

EQUAL '.'
TO WRK-0430-DIGITO.

WRK-0430-DIGITO
MOVE SPACES

*----------------------------------------------------------------*
210000-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
220000-OBTER-DIG-CONTA SECTION.
*----------------------------------------------------------------*
MOVE 'VRS001'
MOVE SPACES

TO WRK-0428-VERSAO
TO WRK-0428-MENSAGEM
WRK-0428-DIG-AGENCIA
WRK-0428-DIG-CONTA
MOVE WRK-IMP-BANCO
TO WRK-0428-BANCO
MOVE WRK-IMP-AGENCIA
TO WRK-0428-AGENCIA
MOVE WRK-IMP-CONTA-CORRENTE TO WRK-CONTA
MOVE WRK-AUX-CONTA
TO WRK-0428-CONTA

Pgina 61 de 70

Curso de Programao Cobol - Online


CALL 'POOL0428'

USING WRK-0428-VERSAO
WRK-0428-MENSAGEM
WRK-0428-BANCO
WRK-0428-AGENCIA
WRK-0428-DIG-AGENCIA
WRK-0428-CONTA
WRK-0428-DIG-CONTA.

IF

NOT EQUAL ZEROS


TO WRK-0428-DIG-CONTA.

RETURN-CODE
MOVE SPACES

*----------------------------------------------------------------*
220000-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
230000-OBTER-NOME SECTION.
*----------------------------------------------------------------*
INITIALIZE WRK-CLIB-AREA-ENTRADA
MOVE 1
MOVE
MOVE
MOVE
MOVE

TO WRK-CLIB-TRANSACAO
WRK-CLIB-PRODUTO
'VRS000'
TO WRK-CLIB-VERSAO
WRK-IMP-BANCO
TO WRK-CLIB-BANCO
WRK-IMP-AGENCIA
TO WRK-CLIB-AGENCIA
WRK-IMP-CONTA-CORRENTE TO WRK-CLIB-CONTA

MOVE 'CLIB1000'
CALL WRK-MODULO
IF

TO WRK-MODULO
USING WRK-CLIB-AREA-ENTRADA
WRK-CLIB-AREA-SAIDA

WRK-CLIB-COD-RETORNO
EQUAL 4
MOVE WRK-CLIB-MENSAGEM-SAIDA (2:997)
TO ERRO-AREA
PERFORM 999999-ROTINA-ERRO

ELSE
IF WRK-CLIB-COD-RETORNO
EQUAL ZEROS
MOVE WRK-CLIB-MENSAGEM-SAIDA
TO WRK-AREA-RETORNO
ELSE
MOVE SPACES
TO NOME.
*----------------------------------------------------------------*
230000-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
240000-MONTAR-TELA SECTION.
*----------------------------------------------------------------*
PERFORM

241000-ABRIR-C1

PERFORM

242000-LER-C1

IF

WRK-FIM-C1
MOVE 4
GOBACK.

PERFORM

EQUAL 'S'
TO WRK-IMP-COD-RETORNO

242000-LER-C1
VARYING WRK-IND FROM 1 BY 1
UNTIL WRK-IND GREATER WRK-DESPREZA OR
WRK-FIM-C1 EQUAL 'S'

Pgina 62 de 70

Curso de Programao Cobol - Online


PERFORM

IF

243000-MONTAR-PAGINA
VARYING WRK-PAGINA FROM 1 BY 1
UNTIL WRK-PAGINA GREATER 4 OR
WRK-FIM-C1 EQUAL 'S'

WRK-FIM-C1
MOVE ZEROS

EQUAL 'S'
TO WRK-IMP-COD-RETORNO
WRK-IMP-PAGINA

MOVE 2

TO WRK-IMP-COD-RETORNO.

ELSE
PERFORM

244000-FECHAR-C1.

*----------------------------------------------------------------*
240000-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
241000-ABRIR-C1 SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
MOVE
MOVE

WRK-IMP-BANCO
WRK-IMP-AGENCIA
WRK-IMP-CONTA-CORRENTE
SPACES

TO
TO
TO
TO

CBCO
OF CURSB038
CAG-BCRIA
OF CURSB038
CCTA-BCRIA-CLI OF CURSB038
WRK-FIM-C1

EXEC SQL
OPEN C1
END-EXEC.
IF

(SQLCODE
NOT EQUAL ZEROS) OR
(SQLWARN0
EQUAL 'W')
MOVE 'DB2'
TO ERR-TIPO-ACESSO
MOVE 'OPEN '
TO ERR-FUN-COMANDO
MOVE 'CAD_CLI_CTCIA'
TO ERR-DBD-TAB
MOVE SQLCODE
TO ERR-SQL-CODE
MOVE SPACES
TO ERR-SEGM
MOVE '0002'
TO ERR-LOCAL
PERFORM 999999-ROTINA-ERRO.

*----------------------------------------------------------------*
241000-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
242000-LER-C1 SECTION.
*----------------------------------------------------------------*
EXEC SQL
FETCH C1
INTO :CURSB038.CPRODT-CURSS-CLI,
:CEFIB014.IFUNDO-CURSS
END-EXEC.
IF

(SQLCODE
NOT EQUAL ZEROS AND +100) OR
(SQLWARN0
EQUAL 'W')
MOVE 'DB2'
TO ERR-TIPO-ACESSO
MOVE 'FETCH '
TO ERR-FUN-COMANDO
MOVE 'CAD_CLI_CTCIA'
TO ERR-DBD-TAB
MOVE SQLCODE
TO ERR-SQL-CODE
MOVE SPACES
TO ERR-SEGM
MOVE '0003'
TO ERR-LOCAL
PERFORM 999999-ROTINA-ERRO.

IF

SQLCODE
MOVE 'S'

EQUAL +100
TO WRK-FIM-C1.

Pgina 63 de 70

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
242000-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
243000-MONTAR-PAGINA SECTION.
*----------------------------------------------------------------*
PERFORM

243100-MONTAR-OCORR
VARYING WRK-IND
FROM 1 BY 1
UNTIL WRK-IND
GREATER 50 OR
WRK-FIM-C1 EQUAL 'S'

ADD 1
MOVE WRK-IMP-PAGINA
MOVE WRK-PAGINA-EDIT
PERFORM

TO WRK-IMP-PAGINA
TO WRK-PAGINA-EDIT
TO OUT-PAGINA-P999

243200-IMPRIMIR-TELA.

*---------------------------------------------------------------*
243000-99-FIM. EXIT.
*---------------------------------------------------------------*
*----------------------------------------------------------------*
243100-MONTAR-OCORR SECTION.
*----------------------------------------------------------------*
MOVE CPRODT-CURSS-CLI OF CURSB038 TO WRK-DET-PRODUTO
MOVE IFUNDO-CURSS
OF CEFIB014 TO WRK-DET-DESCRICAO
IF

WRK-IND
MOVE WRK-DETALHE

NOT GREATER 25
TO OUT-DET1-P999 (WRK-IND)

COMPUTE WRK-IND1
MOVE WRK-DETALHE

= (WRK-IND - 25)
TO OUT-DET2-P999 (WRK-IND1).

ELSE

PERFORM

242000-LER-C1.

*----------------------------------------------------------------*
243100-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
243200-IMPRIMIR-TELA SECTION.
*----------------------------------------------------------------*
PERFORM

243210-POOL0660

PERFORM

243220-INSERIR-SEGMENTOS.

*----------------------------------------------------------------*
243300-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
243210-POOL0660 SECTION.
*----------------------------------------------------------------*
CALL 'POOL0660'

USING OUTPUT-P999-SEG00
660-CURSP999-SEG00.

Pgina 64 de 70

Curso de Programao Cobol - Online


IF

RETURN-CODE
NOT EQUAL ZEROS
MOVE 'APL'
TO ERR-TIPO-ACESSO
MOVE RETURN-CODE
TO WRK-RETURN-CODE
MOVE 04
TO WRK-LOCAL-ERRO
MOVE WRK-ERRO-POOL0660 TO ERR-TEXTO
PERFORM 999999-ROTINA-ERRO.

CALL 'POOL0660'
IF

USING OUTPUT-P999-SEG01
660-CURSP999-SEG01.

RETURN-CODE
NOT EQUAL ZEROS
MOVE 'APL'
TO ERR-TIPO-ACESSO
MOVE RETURN-CODE
TO WRK-RETURN-CODE
MOVE 05
TO WRK-LOCAL-ERRO
MOVE WRK-ERRO-POOL0660 TO ERR-TEXTO
PERFORM 999999-ROTINA-ERRO.

*----------------------------------------------------------------*
243210-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
243220-INSERIR-SEGMENTOS SECTION.
*----------------------------------------------------------------*
MOVE 'CURSP999'

TO WRK-MODNAME

IF

WRK-PAGINA
MOVE 04

EQUAL 1
TO WRK-CONTPARM

MOVE 03

TO WRK-CONTPARM.

ELSE
CALL 'CBLTDLI'

IF

ALT-STATUS
NOT EQUAL SPACES
MOVE 'IMS'
TO ERR-TIPO-ACESSO
MOVE WRK-MODNAME
TO ERR-DBD-TAB
MOVE WRK-ISRT
TO ERR-FUN-COMANDO
MOVE ALT-STATUS
TO ERR-STA-CODE
MOVE '0006'
TO ERR-LOCAL
MOVE SPACES
TO ERR-SEGM
PERFORM 999999-ROTINA-ERRO.

CALL 'CBLTDLI'

IF

USING WRK-CONTPARM
WRK-ISRT
ALT-PCB
OUTPUT-P999-SEG00
WRK-MODNAME

USING WRK-ISRT
ALT-PCB
OUTPUT-P999-SEG01

ALT-STATUS
NOT EQUAL SPACES
MOVE 'IMS'
TO ERR-TIPO-ACESSO
MOVE WRK-MODNAME
TO ERR-DBD-TAB
MOVE WRK-ISRT
TO ERR-FUN-COMANDO
MOVE ALT-STATUS
TO ERR-STA-CODE
MOVE '0007'
TO ERR-LOCAL
MOVE SPACES
TO ERR-SEGM
PERFORM 999999-ROTINA-ERRO.

MOVE SPACES

TO OUT-SEG00-P999
OUT-SEG01-P999.

Pgina 65 de 70

Curso de Programao Cobol - Online


*----------------------------------------------------------------*
243220-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
244000-FECHAR-C1 SECTION.
*----------------------------------------------------------------*
EXEC SQL
CLOSE C1
END-EXEC.
IF

(SQLCODE
NOT EQUAL ZEROS) OR
(SQLWARN0
EQUAL 'W')
MOVE 'DB2'
TO ERR-TIPO-ACESSO
MOVE 'OPEN '
TO ERR-FUN-COMANDO
MOVE 'CAD_CLI_CTCIA'
TO ERR-DBD-TAB
MOVE SQLCODE
TO ERR-SQL-CODE
MOVE SPACES
TO ERR-SEGM
MOVE '0008'
TO ERR-LOCAL
PERFORM 999999-ROTINA-ERRO.

*----------------------------------------------------------------*
244000-99-FIM. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
999999-ROTINA-ERRO SECTION.
*----------------------------------------------------------------*
MOVE
MOVE
MOVE
MOVE
MOVE

3
'CURS0000'
'CURS9999'
WRK-IMP-DEPTO-SENHAS
WRK-IMP-USUARIO-SENHAS

CALL 'POOL7100'

TO
TO
TO
TO
TO

WRK-IMP-COD-RETORNO
ERR-PGM
ERR-MODULO
ERR-COD-DEPTO
ERR-COD-USER

USING IO-PCB
ERRO-AREA
ALT-PCB
SQLCA.

GOBACK.
*----------------------------------------------------------------*
999999-99-FIM. EXIT.
*----------------------------------------------------------------*

Pgina 66 de 70

Curso de Programao Cobol - Online

Padro de Formatao de Mensagens de Sada - Telas


MFS/3270 POOL0660
Funo
Inserir caracteres de "NULL" na mensagem de sada de programas aplicativos,
eliminando o trfego desnecessrio de dados pela linha de comunicao,
possibilitando, assim, uma diminuio no bloco de transmisso.

Formato
Cobol
CALL 'POOL0660' USING MSSGOUTP, AREADEFN.

Assembler
Formato 1
CALL POOL0660, (MSSGOUTP, AREADEFN), VL

Formato 2
CALL POOL0660, ( (Rx), (Ry) ), VL

Parmetros

Parmetro
MSSGOUTP

Tipo

Tamanho

AREADEFN 2

Significado
1. Mensagem de sada do programa de aplicao.
2. rea de definio.

Pgina 67 de 70

Observao

Curso de Programao Cobol - Online


Exemplo

Observaes

Esta pool chama dinamicamente o mdulo e passa o controle para a "POOL0670".


Fluxo de Programas:
MDULO DE CARGA
+------------------+------------+
|
|
|
|
PROGRAMA
|
|
|
APLICATIVO
| POOL0660 |
|
CALL POOL0660 |
|
|
|
|
+------------------+------------+

MDULO DE CARGA
+------------+
|
|
LOAD
|
|
=========> | POOL0670 |
|
|
|
|
+------------+

O tamanho do campo no pode exceder 999 bytes, nem ser igual a zero.

Quando o programa de aplicao recebe o controle aps uma chamada para o


mdulo, um "RETURN-CODE", no REGISTRADOR "15", indica se a operao foi ou
no executada com sucesso.
Aps uma chamada para o mdulo, necessria a verificao do "RETURN-CODE",
caso contrrio, o resultado do processamento poder ser imprevisvel.
O "RETURN-CODE" poder assumir os seguintes valores:
00 = Execuo

Normal.

02 = O tamanho mximo da mensagem de sada fornecido na rea de Definio (LLMSG) menor que o tamanho que se encontra no campo "LL" da rea de

Mensagem de Sada. O tamanho da rea de Definio que se encontra no


campo "LL-AREA" menor que o tamanho real da rea definida no programa de
aplicao.
04 = Incompatibilidade entre a rea de Definio de Campos e a definio da
Mensagem de Sada (MOD). O tamanho de um ou mais campos definidos tanto

na rea de definio de campos como na definio da Mensagem de Sada est


diferente.
08

=Definio do campo invlida. O tipo do campo pode estar errado, o tamanho


pode ser igual a zero ou os campos podem ter atributo menor que trs bytes.

Pgina 68 de 70

Curso de Programao Cobol - Online


ATRIBUTOS
01

WRK-ATRIBUTOS.

*****--> PROTEGE, NORMAL, ALFA


03

WRK-00225

PIC S9(008) COMP

VALUE +00225.

*****--> PROTEGE, NORMAL, NUMERICO


03

WRK-00241

PIC S9(008) COMP

VALUE +00241.

*****--> DESPROTEGE, NORMAL, NUMERICO, POSICIONAR CURSOR


03

WRK-49361

PIC S9(008) COMP

VALUE +49361.

*****--> DESPROTEGE, BRILHANTE, NUMERICO, POSICIONAR CURSOR


03

WRK-49369

PIC S9(008) COMP

VALUE +49369.

rea da POOL0660
0 - protegido sem atributo
1 - desprotegido sem atributo
2 - protegido com atributo
3 - desprotegido com atributo
01

660-CAMP79TM.
03

660-LL-AREA-79TM

03

660-LL-MENSAGEM-79TM

PIC

9(004) COMP

VALUE 0213.

03

660-SENHAS-79TM

PIC

9(004) COMP

VALUE 0037.

03

660-NOPCAO-79TM

PIC

9(004) COMP

VALUE 2004.

03

660-FASE-79TM

PIC

9(004) COMP

VALUE 0001.

03

660-CDPREM-79TM

PIC

9(004) COMP

VALUE 0004.

03

660-CDPRES-79TM

PIC

9(004) COMP

VALUE 0002.

03

660-DESCRI-79TM

PIC

9(004) COMP

VALUE 2052.

03

660-VALOR-79TM

PIC

9(004) COMP

VALUE 2018.

03

660-ANOFA-79TM

PIC

9(004) COMP

VALUE 2006.

10

03

660-ANOMO-79TM

PIC

9(004) COMP

VALUE 2006.

11

03

660-MENSA-79TM

PIC

9(004) COMP

VALUE 0079.

12

660-LL-AREA-79TM

PIC

9(004) COMP

VALUE 0024.

= qtde de campos (12) *2 = 24

Pgina 69 de 70

(QTDE DE CAMPOS)

(TAMANHO EM BYTES)

2
3

Curso de Programao Cobol - Online


rea de sada do programa
01

OUTPUT-79TM.
03

OUT-LL-79TM

03

OUT-ZZ-79TM

03

OUT-DADOS-79TM.

PIC S9(004) COMP VALUE +0213


PIC

05

OUT-SENHAS-79TM

PIC

05

OUT-NOPCAO-ATTR-79TM

PIC

05

OUT-NOPCAO-79TM.
07

OUT-NOPCAO-79TM-N PIC

9(004) COMP VALUE

X(037).
9(004) COMP.

9(002).

05

OUT-FASE-79TM

PIC

X(001).

05

OUT-CDPREM-ATTR-79TM

PIC

9(004) COMP.

05

OUT-CDPREM-79TM.
07

05

OUT-CDPREM-79TM-N PIC

9(002).

OUT-CDPRES-79TM.
07

OUT-CDPRES-79TM-N PIC

9(002).

05

OUT-DESCRI-ATTR-79TM

PIC

9(004) COMP.

05

OUT-DESCRI-79TM

PIC

X(050).

05

OUT-VALOR-ATTR-79TM

PIC

9(004) COMP.

05

OUT-VALOR-79TM.
PIC

ZZZZZZZZZZZZ9,99.

PIC

9(004) COMP.

PIC

9(004).

PIC

9(004) COMP.

PIC

9(004).

PIC

X(079).

07

OUT-VALOR-79TM-N

05

OUT-ANOFA-ATTR-79TM

05

OUT-ANOFA-79TM.
07

OUT-ANOFA-79TM-N

05

OUT-ANOMO-ATTR-79TM

05

OUT-ANOMO-79TM.
07

05

OUT-ANOMO-79TM-N

OUT-MENSA-79TM

Pgina 70 de 70

0.

Você também pode gostar