Professional Documents
Culture Documents
TABELA-SIGLAS-UF-VALIDAS
A C A L A P A M B A C E D F E S G O M A M T M S M G P A P B P R P E P I R J R N R S R O R R S C S P S E T O
SIGLA-OK (27)
...
SIGLA-OK (2)
SIGLA-OK (1)
01
01
TABELA-SIGLAS-UF-VALIDAS.
05 FILLER PIC X(02) VALUE AC.
05 FILLER PIC X(02) VALUE AL.
05 FILLER PIC X(02) VALUE AP.
05 FILLER PIC X(02) VALUE AM.
05 FILLER PIC X(02) VALUE BA.
05 FILLER PIC X(02) VALUE CE.
05 FILLER PIC X(02) VALUE DF.
05 FILLER PIC X(02) VALUE ES.
05 FILLER PIC X(02) VALUE GO.
05 FILLER PIC X(02) VALUE MA.
05 FILLER PIC X(02) VALUE MT.
05 FILLER PIC X(02) VALUE MS.
05 FILLER PIC X(02) VALUE MG.
05 FILLER PIC X(02) VALUE PA.
05 FILLER PIC X(02) VALUE PB.
05 FILLER PIC X(02) VALUE PR.
05 FILLER PIC X(02) VALUE PE.
05 FILLER PIC X(02) VALUE PI.
05 FILLER PIC X(02) VALUE RJ.
05 FILLER PIC X(02) VALUE RN.
05 FILLER PIC X(02) VALUE RS.
05 FILLER PIC X(02) VALUE RO.
05 FILLER PIC X(02) VALUE RR.
05 FILLER PIC X(02) VALUE SC.
05 FILLER PIC X(02) VALUE SP.
05 FILLER PIC X(02) VALUE SE.
05 FILLER PIC X(02) VALUE TO.
TABELA-SIGLAS-UF-VALIDAS-R REDEFINES
TABELA-SIGLAS-UF-VALIDAS.
05 SIGLA-OK PIC X(02 OCCURS 27.
01
TABELA-SIGLAS-UF-VALIDAS.
05 FILLER PIC X(24) VALUE ACALAPAMBACEDFESGOMAMTMS.
05 FILLER PIC X(24) VALUE MGPAPBPRPEPIRJRNRSRORRSC.
05 FILLER PIC X(06) VALUE SPSETO.
TABELA-SIGLAS-UF-VALIDAS-R REDEFINES
TABELA-SIGLAS-UF-VALIDAS.
05 SIGLA-OK PIC X(02) OCCURS 27.
Exemplo 2
TABELA-UF-E-NOME
A C A C R E
A L A L A G O A S
NOMEUF (1)
SIGLAUF (1)
UF-E-NOME (1)
01
01
A P A M A P A
. . . .
NOMEUF (2)
SIGLAUF (2)
UF-E-NOME (2)
TABELA-UF-E-NOME.
05 FILLER PIC X(21) VALUE ACACRE.
05 FILLER PIC X(21) VALUE ALALAGOAS.
05 FILLER PIC X(21) VALUE APAMAPA.
05 FILLER PIC X(21) VALUE AMAMAZONAS.
05 FILLER PIC X(21) VALUE BABAHIA.
05 FILLER PIC X(21) VALUE CECEARA.
05 FILLER PIC X(21) VALUE DFDISTRITO FEDERAL.
05 FILLER PIC X(21) VALUE ESESPIRITO SANTO.
05 FILLER PIC X(21) VALUE GOGOIAS.
05 FILLER PIC X(21) VALUE MAMARANHAO.
05 FILLER PIC X(21) VALUE MTMATO GROSSO.
05 FILLER PIC X(21) VALUE MSMATA GROSSO DO SUL.
05 FILLER PIC X(21) VALUE MGMINAS GERAIS.
05 FILLER PIC X(21) VALUE PAPARA.
05 FILLER PIC X(21) VALUE PBPARAIBA.
05 FILLER PIC X(21) VALUE PRPARANA.
05 FILLER PIC X(21) VALUE PEPERNAMBUCO.
05 FILLER PIC X(21) VALUE PIPIAUI.
05 FILLER PIC X(21) VALUE RJRIO DE JANEIRO.
05 FILLER PIC X(21) VALUE RNRIO GRANDE DO NORTE.
05 FILLER PIC X(21) VALUE RSRIO GRANDE DO SUL.
05 FILLER PIC X(21) VALUE RORONDONIA.
05 FILLER PIC X(21) VALUE RRRORAIMA.
05 FILLER PIC X(21) VALUE SCSANTA CATARINA.
05 FILLER PIC X(21) VALUE SPSAO PAULO.
05 FILLER PIC X(21) VALUE SESERGIPE.
05 FILLER PIC X(21) VALUE TOTOCANTINS.
TABELA-UF-E-NOME-R REDEFINES
TABELA-UF-E-NOME.
05 UF-E-NOME OCCURS 27.
10 SIGLAUF PIC X(02).
10 NOMEUF PIC X(19).
A tabela ter 567 bytes; ela ser composta por 27 campos denominados UF-E-NOME , cada qual com 21 bytes, alocados na
seguinte sequncia:
SIGLAUF
NOMEUF
SIGLAUF
NOMEUF
...
SIGLAUF
NOMEUF
(1)
(1)
(2)
(2)
(27)
(27)
Exemplo 3
TABELA-UF-E-NOME
A C A L A P A M B A C E D F E S G O M A M . . . . T O A C R E
SIGLA-UF (2)
SIGLA-UF (1)
...
SIGLA-OK (27)
01
A L A G O A S
NOME-UF (1)
NOME-UF (2)
....
TABELA-UF-E-NOME.
*
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
X(02)
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
AC.
AL.
AP.
AM.
BA.
CE.
DF.
ES.
GO.
MA.
MT.
MS.
MG.
PA.
PB.
PR.
PE.
PI.
RJ.
RN.
RS.
RO.
RR.
SC.
SP.
SE.
TO.
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
ACRE.
ALAGOAS.
AMAPA.
AMAZONAS.
BAHIA.
CEARA.
DISTRITO FEDERAL.
ESPIRITO SANTO.
GOIAS.
MARANHAO.
MATO GROSSO.
MATA GROSSO DO SUL.
MINAS GERAIS.
PARA.
PARAIBA.
PARANA.
10
10
10
10
10
10
10
10
10
10
10
01
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
FILLER
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
X(19)
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
PERNAMBUCO.
PIAUI.
RIO DE JANEIRO.
RIO GRANDE DO NORTE.
RIO GRANDE DO SUL.
RONDONIA.
RORAIMA.
SANTA CATARINA.
SAO PAULO.
SERGIPE.
TOCANTINS.
TABELA-UF-E-NOME-R REDEFINES
TABELA-UF-E-NOME.
05 SIGLA-UF PIC X(02) OCCURS 27.
05 NOME-UF PIC X(19) OCCURS 27.
A tabela ter 567 bytes : 54 referentes aos 27 campos de 2 bytes cada (denominados SIGLA-UF) mais 513 referentes aos 27
campos de 19 bytes cada (denominados NOME-UF); tais campos sero alocados da seguinte forma:
SIGLAUF
SIGLAUF
...
SIGLAUF
NOMEUF
NOMEUF
...
NOMEUF
(1)
(2)
(27)
(1)
(2)
(27)
Exemplo 4
TABELA-AGENCIAS
0 0 0 0 1 0 5 3 5 6 0 0 0 5 6 0 5 3 0 0 . . . .
COD-AGE(1)
QTDD-CONTASINATIVAS (1)
QTDD-CONTAS(1)
0 6 7 8 0 0 4 1 9 4 0 0 1 1 1 0 4 0 8 3
COD-AGE(500)
QTDD-CONTASATIVAS (1)
DADOS-AGENCIA(1)
01
TABELA-AGENCIAS.
05 DADOS-AGENCIA OCCURS 500.
10 COD-AGE
PIC
10 QTDD-CONTAS
PIC
10 QTDD-CONTAS-INATIVAS PIC
10 QTDD-CONTAS-ATIVAS
PIC
QTDD-CONTASINATIVAS (500)
QTDD-CONTAS(500)
QTDD-CONTAS-ATIVAS
(500)
DADOS-AGENCIA(500)
9(5).
9(5).
9(5).
9(5).
A tabela ter 10000 bytes alocados na seguinte forma e sequncia: 500 elementos de 20 bytes cada (denominados DADOSAGENCIA, e compostos cada qual por 4 sub-campos : COD-AGE, QTDD-CONTAS, QTDD-CONTAS-INATIVAS e
QTDD-CONTAS ATIVAS.
Exemplo 5
TABELA-AGENCIAS
0 0 0 0 1 ...
0 6 7 8 0 0 5 3 5 6 ...
COD-AGE
(1)
COD-AGE
(500)
0 0 1 1 1 0 5 3 0 0 ...
0 4 0 8 3
QTDD-CONTAS- QTDD-CONTAS-INATIVAS
INATIVAS (1) (500)
QTDD-CONTAS
(1)
01
0 4 1 9 4 0 0 0 5 6 ...
QTDD-CONTAS
(500)
TABELA-AGENCIAS.
10 COD-AGE
10 QTDD-CONTAS
10 QTDD-CONTAS-INATIVAS
10 QTDD-CONTAS-ATIVAS
OCCURS
OCCURS
OCCURS
OCCURS
QTDD-CONTASATIVAS (1)
500
500
500
500
PIC
PIC
PIC
PIC
QTDD-CONTAS-ATIVAS
(500)
9(5).
9(5).
9(5).
9(5).
A tabela ter 10000 bytes alocados da seguinte forma e na seguinte sequncia : 2500 bytes referentes aos 500 elementos de
5 bytes cada denominados COD-AGE , seguidos por 2500 bytes referentes aos 500 elementos de 5 bytes cada denominados
QTDD-CONTAS, mais 2500 bytes referentes aos 500 elementos de 5 bytes cada denominados QTDD-CONTASINATIVAS e finalmente os 2500 bytes referentes aos 500 elementos de 5 bytes cada denominados QTDD-CONTAS
ATIVAS.
Exemplo 6
01
TABELA-AGENCIAS.
10 DADOS-POR-AGENCIA OCCURS 500.
15 DADOS-GERAIS.
20 COD-AGE PIC 9(5).
20 NOME-GERENTE PIC X(30).
15 DADOS-FINANCEIROS.
25 DEBITOS-POR-DIA OCCURS 31 PIC 9(9)V99.
25 CREDITOS-POR-DIA OCCURS 31 PIC 9(9)V99.
25 SALDO-POR-DIA
OCCURS 31 PIC 9(9)V99.
(1)
(2)
(3)
(500)
Da mesma forma, se for necessrio referenciar DADOS-GERAIS ou DADOS-FINANCEIROS deve-se indicar o ndice ou
subscritor :
5
DADOS-GERAIS
DADOS-GERAIS
DADOS-GERAIS
...
...
DADOS-GERAIS
(1)
(2)
(3)
DADOS-FINANCEIROS
DADOS-FINANCEIROS
DADOS-FINANCEIROS
...
...
DADOS-FINANCEIROS
(500)
(1)
(2)
(3)
(500)
CREDITOSD-POR-DIA (1, 1)
CREDITOSD-POR-DIA (1, 2)
CREDITOSD-POR-DIA (1, 3)
SALDO-POR-DIA (1, 1)
SALDO-POR-DIA (1, 2)
SALDO-POR-DIA (1, 3)
DEBITOS-POR-DIA
DEBITOS-POR-DIA
DEBITOS-POR-DIA
DEBITOS-POR-DIA
CREDITOSD-POR-DIA
CREDITOSD-POR-DIA
CREDITOSD-POR-DIA
CREDITOSD-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
...
...
31)
1)
2)
3)
DEBITOS-POR-DIA
DEBITOS-POR-DIA
DEBITOS-POR-DIA
DEBITOS-POR-DIA
(2,
(3,
(3,
(3,
31)
1)
2)
3)
DEBITOS-POR-DIA
...
...
...
DEBITOS-POR-DIA
DEBITOS-POR-DIA
DEBITOS-POR-DIA
(3, 31)
(500, 1)
(500, 2)
(500, 3)
CREDITOSD-POR-DIA (500, 1)
CREDITOSD-POR-DIA (500, 2)
CREDITOSD-POR-DIA (500, 3)
SALDO-POR-DIA (500, 1)
SALDO-POR-DIA (500, 2)
SALDO-POR-DIA (500, 3)
...
...
...
...
(1,
(2,
(2,
(2,
31)
1)
2)
3)
(2,
(3,
(3,
(3,
31)
1)
2)
3)
...
(1,
(2,
(2,
(2,
...
...
(1)
(1)
(1,
(1,
(1,
(1,
1)
2)
3)
4)
(1,
(1,
(1,
(1,
(1,
31)
1)
2)
3)
4)
(1,
(1,
(1,
(1,
31)
1)
2)
3)
31)
1)
2)
3)
(2,
(3,
(3,
(3,
31)
1)
2)
3)
...
CREDITOSD-POR-DIA
CREDITOSD-POR-DIA
CREDITOSD-POR-DIA
CREDITOSD-POR-DIA
...
(1,
(2,
(2,
(2,
SALDO-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
...
SALDO-POR-DIA
...
SALDO-POR-DIA
COD-AGE
NOME-GERENTE
DEBITOS-POR-DIA
DEBITOS-POR-DIA
DEBITOS-POR-DIA
DEBITOS-POR-DIA
...
DEBITOS-POR-DIA
CREDITOS-POR-DIA
CREDITOS-POR-DIA
CREDITOS-POR-DIA
CREDITOS-POR-DIA
...
CREDITOS-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
...
SALDO-POR-DIA
...
...
...
...
COD-AGE
NOME-GERENTE
DEBITOS-POR-DIA
DEBITOS-POR-DIA
DEBITOS-POR-DIA
DEBITOS-POR-DIA
...
DEBITOS-POR-DIA
CREDITOS-POR-DIA
CREDITOS-POR-DIA
CREDITOS-POR-DIA
CREDITOS-POR-DIA
...
CREDITOS-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
SALDO-POR-DIA
...
SALDO-POR-DIA
(1, 4)
(1,
(2)
(2)
(2,
(2,
(2,
(2,
31)
(2,
(2,
(2,
(2,
(2,
31)
1)
2)
3)
4)
(2,
(2,
(2,
(2,
(2,
31)
1)
2)
3)
4)
1)
2)
3)
4)
(2, 31)
(500)
(500)
(500,
(500,
(500,
(500,
1)
2)
3)
4)
(500,
(500,
(500,
(500,
(500,
31)
1)
2)
3)
4)
(500,
(500,
(500,
(500,
(500,
31)
1)
2)
3)
4)
(500, 31)
Exemplo 7
Anlogo ao exemplo anterior, mas o OCCURS de DADOS-FINANCEIROS no est em cada uma das variveis que o
compem, mas no prprio DADOS-FINANCEIROS:
01
TABELA-AGENCIAS.
10 DADOS-POR-AGENCIA OCCURS 500.
15 DADOS-GERAIS.
20 COD-AGE PIC 9(5).
20 NOME-GERENTE PIC X(30).
15 DADOS-FINANCEIROS OCCURS 31.
25 DEBITOS-POR-DIA PIC 9(9)V99.
25 CREDITOS-POR-DIA PIC 9(9)V99.
25 SALDO-POR-DIA
PIC 9(9)V99.
(1)
(1)
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(1,
(2)
(2)
(2,
(2,
(2,
(2,
(2,
(2,
(2,
(2,
(2,
1)
1)
1)
2)
2)
2)
3)
3)
3)
31)
31)
31)
1)
1)
1)
2)
2)
2)
3)
3)
3)
(2, 31)
(2, 31)
(2, 31)
COD-AGE
NOME-GERENTE
DEBITOS-POR-DIA
CREDITOS-POR-DIA
SALDO-POR-DIA
DEBITOS-POR-DIA
CREDITOS-POR-DIA
SALDO-POR-DIA
DEBITOS-POR-DIA
CREDITOS-POR-DIA
SALDO-POR-DIA
...
...
DEBITOS-POR-DIA
CREDITOS-POR-DIA
SALDO-POR-DIA
...
...
...
...
...
COD-AGE
NOME-GERENTE
DEBITOS-POR-DIA
CREDITOS-POR-DIA
SALDO-POR-DIA
DEBITOS-POR-DIA
CREDITOS-POR-DIA
SALDO-POR-DIA
DEBITOS-POR-DIA
CREDITOS-POR-DIA
SALDO-POR-DIA
...
...
DEBITOS-POR-DIA
CREDITOS-POR-DIA
SALDO-POR-DIA
(3)
(3)
(3,
(3,
(3,
(3,
(3,
(3,
(3,
(3,
(3,
1)
1)
1)
2)
2)
2)
3)
3)
3)
(3, 31)
(3, 31)
(3, 31)
(500)
(500)
(500,
(500,
(500,
(500,
(500,
(500,
(500,
(500,
(500,
1)
1)
1)
2)
2)
2)
3)
3)
3)
(500, 31)
(500, 31)
(500, 31)
01
TABELA-AGENCIAS.
05 DADOS-AGENCIA OCCURS 500.
10 COD-AGE
PIC
10 QTDD-CONTAS
PIC
10 QTDD-CONTAS-INATIVAS PIC
10 QTDD-CONTAS-ATIVAS
PIC
TABELA-AGENCIAS.
10 COD-AGE
10 QTDD-CONTAS
10 QTDD-CONTAS-INATIVAS
10 QTDD-CONTAS-ATIVAS
OCCURS
OCCURS
OCCURS
OCCURS
9(5).
9(5).
9(5).
9(5).
500
500
500
500
PIC
PIC
PIC
PIC
9(5).
9(5).
9(5).
9(5).
Initializao
(formatao colocando mesmo contedo em todas as variveis)
Usando loop : qualquer um dos loops a seguir pode ser usado em qualquer um dos 2 vetores:
Loop com GO TO :
MOVE 1 TO IND.
VOLTA.
IF IND > 500
GO TO ACABOU.
MOVE ZERO TO COD-AGE (IND).
MOVE ZERO TO QTDD-CONTAS (IND).
MOVE ZERO TO QTDD-CONTAS-INATIVAS (IND).
MOVE ZERO TO QTDD-CONTAS-ATIVAS (IND).
ADD 1 TO IND.
GO TO VOLTA.
ACABOU.
...
10
Pesquisa direta
(busca de dados num vetor acessando diretamente o elemento desejado)
S possvel se :
houver um campo chave
os elementos estiverem classificados por esse campo chave
houver elementos (ou espao vazio) para TODAS as chaves possveis (ex.: se o campo chave tiver 5 bytes e for
numrico, o vertor deve ter 99999 elementos); por isso, normalmente no se usa este processo para chaves
alfanumricas; somente para chaves numricas inteiras.
01
01
...
...
MOVE 12388 TO COD-CLI-ACHAR
IF CLIENTE-BOM-RUIM (COD-CLI-ACHAR) = R
MOVE RUIM TO TIPO-CLI
ELSE
MOVE BOM TO TIPO-CLI
11
END-IF
...
...
MOVE 12388 TO COD-CLI-ACHAR
MOVE NAO' TO FLAG-ACHOU-OU-NAO
MOVE 1 TO IND.
PERFORM UNTIL IND > 10000
IF COD-CLI-ACHAR = COD-CLI (IND)
MOVE SIM TO FLAG-ACHOU-OU-NAO
MOVE BOM-RUIM (IND) TO TIPO-CLI
MOVE 10001 TO IND
END-IF
END-PERFORM
...
...
12
15 QUEBRA
15.1 Quebra de 1 nvel
Supondo um arquivo de entrada que tenha em cada registro lgico o codigo de cliente (chave) e o valor das compras , e
cujos registros sejam os a seguir (para facilitar a anlise, todos os valores das compras esto = 1,00) :
CLIENTE
VALOR
00001 00000000100
00001 00000000100
00001 00000000100
00001 00000000100
00001 00000000100
00001 00000000100
00002 00000000100
00002 00000000100
00002 00000000100
00002 00000000100
00004 00000000100
00004 00000000100
00005 00000000100
00011 00000000100
Se quisermos totalizar / sumarizar por CLIENTE (mais o Total Geral) num relatrio, deveremos imprimir algo como :
CODIGO
VALOR
00001
00002
00004
00005
00011
6,00
4,00
2,00
1,00
1,00
GERAL
14,00
13
VALOR.
14
CLIENTE
VALOR
00001 00000000100
00001 00000000100
00001 00000000100
00001 00000000100
00001 00000000100
00001 00000000100
00002 00000000100
00002 00000000100
00002 00000000100
00002 00000000100
00004 00000000100
00004 00000000100
00005 00000000100
00011 00000000100
00001 00000000200
00001 00000000200
00001 00000000200
00001 00000000200
00001 00000000200
00001 00000000200
00003 00000000200
00003 00000000200
00003 00000000200
00003 00000000200
00003 00000000200
00003 00000000200
00004 00000000200
00005 00000000200
Se quisermos totalizar / sumarizar por FILIAL E CLIENTE (mais o Total Geral) num relatrio, deveremos imprimir algo
como :
FILIAL CLIENTE
001
001
001
001
001
00001
00002
00004
00005
00011
001
002
002
002
002
002
VALOR
6,00
4,00
2,00
1,00
1,00
14,00
00001
00003
00004
00005
TOTAL FILIAL
12,00
12,00
2,00
2,00
28,00
TOTAL FILIAL
42,00
TOTAL GERAL
15
16
LER-ARQ-SEQ SECTION.
READ ARQ-SEQ INTO AL-ARQ
AT END MOVE SIM TO EOF-ARQ-SEQ
END-READ
MOVE COD-FIL TO FIL-ATU
MOVE COD-CLI TO CLI-ATU.
SAI-LER-ARQ-SEQ. EXIT.
*-------------------------------------------PROCESSA-REG SECTION.
IF CHAVE-ATU NOT = CHAVE-ANT
PERFORM QUEBRA-CLIENTE
MOVE COD-CLI TO CLI-ATU
END-IF
IF CHAVE-ATU NOT = CHAVE-ANT
PERFORM QUEBRA-FILIAL
MOVE COD-FIL TO FIL-ATU
END-IF
ADD VALCOMPRA TO TOT-VCOMP-CLI.
SAI-PROCESSA-REG. EXIT.
*-------------------------------------------QUEBRA-CLIENTE SECTION.
IF W-LINS > 50
PERFORM CABEC
END-IF
MOVE TOT-VCOMP-CLI TO I-T-VALCOMP
WRITE AI-FD FROM AI-TOT BEFORE 1
MOVE SPACES TO AI-FD
WRITE AI-FD FROM AI-TOT BEFORE 1
ADD 2 TO W-LINS
ADD TOT-VCOMP-CLI TO TOT-VCOMP-FIL.
MOVE ZERO TO TOT-VCOMP-CLI.
SAI-QUEBRA-CLIENTE. EXIT.
*-------------------------------------------QUEBRA-FILIAL SECTION.
IF W-LINS > 50
PERFORM CABEC
END-IF
MOVE TOT-VCOMP-FIL TO I-T-VALCOMP
WRITE AI-FD FROM AI-TOT BEFORE 1
MOVE SPACES TO AI-FD
WRITE AI-FD FROM AI-TOT BEFORE 1
ADD 2 TO W-LINS
ADD TOT-VCOMP-FIL TO TOT-VCOMP-GER
MOVE ZERO TO TOT-VCOMP-FIL.
SAI-QUEBRA-FILIAL. EXIT.
*-------------------------------------------QUEBRA-GERAL SECTION.
IF W-LINS > 50
PERFORM CABEC
END-IF
MOVE TOT-VCOMP-GER TO I-T-VALCOMP
WRITE AI-FD FROM AI-TOT BEFORE 1
SAI-QUEBRA-GERAL. EXIT.
*-------------------------------------------CABEC SECTION.
WRITE AI-FD FROM AI-CAB BEFORE PAGE
MOVE ZERO TO W-LINS.
SAI-CABEC. EXIT.
17
001
001
001
001
001
001
001
001
001
001
001
001
001
001
002
002
002
002
002
002
002
002
002
002
002
002
002
002
001
001
001
001
001
001
001
001
001
001
001
001
001
001
002
002
002
002
002
002
002
002
002
002
002
002
002
002
00001
00001
00001
00001
00001
00001
00002
00002
00002
00002
00004
00004
00005
00011
00001
00001
00001
00001
00001
00001
00003
00003
00003
00003
00003
00003
00004
00005
00001
00001
00001
00001
00001
00001
00002
00002
00002
00002
00004
00004
00005
00011
00001
00001
00001
00001
00001
00001
00003
00003
00003
00003
00003
00003
00004
00005
VALOR
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000100
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
00000000200
18
Se quisermos totalizar / sumarizar por EMPRESA e FILIAL e CLIENTE (mais o Total Geral) num relatrio, deveremos
imprimir algo como :
EMPRESA FILIAL CLIENTE
001
001
001
001
001
001
001
001
001
001
00001
00002
00004
00005
00011
001
001
001
001
001
002
002
002
002
00001
00003
00004
00005
001
001
001
001
001
001
00001
00002
00004
00005
00011
001
002
002
002
002
002
002
002
002
6,00
4,00
2,00
1,00
1,00
14,00
002
002
002
002
002
002
VALOR
12,00
12,00
2,00
2,00
28,00
TOTAL FILIAL
42,00
TOTAL EMPRESA
6,00
4,00
2,00
1,00
1,00
14,00
00001
00003
00004
00005
002
002
TOTAL FILIAL
TOTAL FILIAL
12,00
12,00
2,00
2,00
28,00
TOTAL FILIAL
42,00
TOTAL EMPRESA
84,00
TOTAL GERAL
19
01
CHAVE-ANT.
05 EMP-ANT
PIC 9(3).
05 FIL-ANT
PIC 9(3).
05 CLI-ANT
PIC 9(5).
01 TOT-VCOMP-CLI PIC 9(9)V99 VALUE ZERO.
01 TOT-VCOMP-FIL PIC 9(9)V99 VALUE ZERO.
01 TOT-VCOMP-EMP PIC 9(9)V99 VALUE ZERO.
01 TOT-VCOMP-GER PIC 9(9)V99 VALUE ZERO.
*-------------------------------------------PROCEDURE DIVISION.
ROTINA-PRINCIPAL SECTION.
OPEN INPUT ARQ-SEQ
OPEN OUTPUT ARQ-REL
PERFORM UNTIL EOF-ARQ-SEQ = SIM
PERFORM LER-ARQ-SEQ
IF EOF-ARQ-SEQ = NAO
PERFORM PROCESSA-REG
END-IF
MOVE CHAVE-ATU TO CHAVE-ANT
END-PERFORM
PERFORM QUEBRA-CLIENTE
PERFORM QUEBRA-FILIAL
PERFORM QUEBRA-EMPRESA
PERFORM QUEBRA-GERAL
CLOSE ARQ-SEQ
STOP RUN.
*-------------------------------------------LER-ARQ-SEQ SECTION.
READ ARQ-SEQ INTO AL-ARQ
AT END MOVE SIM TO EOF-ARQ-SEQ
END-READ
MOVE COD-EMP TO EMP-ATU
MOVE COD-FIL TO FIL-ATU
MOVE COD-CLI TO CLI-ATU.
SAI-LER-ARQ-SEQ. EXIT.
*-------------------------------------------PROCESSA-REG SECTION.
IF CHAVE-ATU NOT = CHAVE-ANT
PERFORM QUEBRA-CLIENTE
MOVE COD-CLI TO CLI-ATU
END-IF
IF CHAVE-ATU NOT = CHAVE-ANT
PERFORM QUEBRA-FILIAL
MOVE COD-FIL TO FIL-ATU
END-IF
IF CHAVE-ATU NOT = CHAVE-ANT
PERFORM QUEBRA-EMPRESA
MOVE COD-FIL TO FIL-ATU
END-IF
ADD VALCOMPRA TO TOT-VCOMP-CLI.
SAI-PROCESSA-REG. EXIT.
*--------------------------------------------
20