Módulo COBOL para geração de relatórios a partir de arquivo sequencial.
******************************************************************
* PROGRAMADOR: JOSE ROBERTO - COBOL DICAS
* DATA.......: 06/02/2025
* DESCRICAO..: MODULO DE GERACAO DE RELATORIO
* NOME.......: CAD0002A
******************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. REL0001A.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT REL0001A-OUT ASSIGN TO 'REL0001A.txt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD REL0001A-OUT.
01 WRK-REL0001A-REGISTRO.
05 WRK-REL0001A-STRING PIC X(100).
WORKING-STORAGE SECTION.
* Definição do tamanho máximo de cadastros
01 WRK-IND-LINHA PIC 9(02) VALUE ZEROS.
01 WRK-IND-PAGINACAO PIC 9(02) VALUE 1.
01 WRK-IND1 PIC 9(02) VALUE 1.
01 WRK-DATA-COMUM PIC 9(008) VALUE ZEROS.
* MASCARA FORMATO DA DATA - DD/MM/AAAA
01 WRK-MASC-DATA.
05 WRK-MASC-DATA-DIA PIC 9(002) VALUE ZEROS.
05 FILLER PIC X(001) VALUE '/'.
05 WRK-MASC-DATA-MES PIC 9(002) VALUE ZEROS.
05 FILLER PIC X(001) VALUE '/'.
05 WRK-MASC-DATA-ANO PIC 9(004) VALUE ZEROS.
* MASCARA FORMATO DA HORA - HH:MM
01 WRK-MASC-TIME.
05 WRK-MASC-HORA PIC 9(002) VALUE ZEROS.
05 FILLER PIC X(001) VALUE ':'.
05 WRK-MASC-MIN PIC 9(002) VALUE ZEROS.
01 WRK-REL0001A-LINHA.
03 FILLER PIC X(80) VALUE
'**---------------------------------------------------------
- '-------------------**'.
01 WRK-REL0001A-LINHA-BRANCO PIC X(80) VALUE SPACES.
01 WRK-REL0001A-CAB1.
03 FILLER PIC X(67) VALUE
'** REL0001A COBOL DICAS
- ' '.
03 WRK-REL0001A-CAB1-DATA PIC X(10) VALUE SPACES.
03 FILLER PIC X(03) VALUE ' **'.
01 WRK-REL0001A-CAB2.
03 FILLER PIC X(08) VALUE
'** PAG: '.
03 WRK-REL0001A-PAG PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(62) VALUE
' RELATORIO CADASTRO USUARIO
- ' '.
03 WRK-REL0001A-HORA PIC X(05) VALUE SPACES.
03 FILLER PIC X(03) VALUE ' **'.
01 WRK-REL0001A-DET1.
03 FILLER PIC X(06) VALUE 'NOME: '.
03 WRK-REL0001A-NOME PIC X(30) VALUE SPACES.
03 FILLER PIC X(11) VALUE ' - CODIGO: '.
03 WRK-REL0001A-COD PIC 9(02) VALUE ZEROS.
01 WRK-REL0001A-DET2.
03 FILLER PIC X(08) VALUE 'IDADE: '.
03 WRK-REL0001A-IDADE PIC 9(02) VALUE ZEROS.
03 FILLER PIC X(15) VALUE
' - DATA NASC.: '.
03 WRK-REL0001A-DATA-NASC PIC X(10) VALUE SPACES.
03 FILLER PIC X(13) VALUE ' - TELEFONE: '.
03 WRK-REL0001A-TELEFONE PIC 9(09) VALUE ZEROS.
01 WRK-REL0001A-DET3.
03 FILLER PIC X(07) VALUE 'CARGO: '.
03 WRK-REL0001A-CARGO PIC X(20) VALUE SPACES.
03 FILLER PIC X(11) VALUE ' - E-MAIL: '.
03 WRK-REL0001A-EMAIL PIC X(30) VALUE SPACES.
01 WRK-REL0001A-DET4.
03 FILLER PIC X(10) VALUE 'ENDERECO: '.
03 WRK-REL0001A-RUA PIC X(50) VALUE SPACES.
01 WRK-REL0001A-DET5.
03 FILLER PIC X(14) VALUE 'CIDADE: '.
03 WRK-REL0001A-CIDADE PIC X(30) VALUE SPACES.
03 FILLER PIC X(11) VALUE ' - ESTADO: '.
03 WRK-REL0001A-ESTADO PIC X(02) VALUE SPACES.
03 FILLER PIC X(08) VALUE ' - CEP: '.
03 WRK-REL0001A-CEP PIC 9(08) VALUE ZEROS.
* DEFINICAO DE DATA E HORA DO SISTEMA.
COPY COD001A.
LINKAGE SECTION.
* Definição da estrutura do cadastro
COPY COPY002A.
*================================================================*
PROCEDURE DIVISION USING COPY002A-REGISTRO.
*================================================================*
*----------------------------------------------------------------*
* PROCESSAMENTO PRINCIPAL
*----------------------------------------------------------------*
*> cobol-lint CL002 0000-processar
0000-PROCESSAR SECTION.
*----------------------------------------------------------------*
PERFORM 0001-ABRE-ARQUIVO
PERFORM 0002-OBTER-DATA
PERFORM 0003-OBTER-TIME
PERFORM 0004-GERAR-CABECALHO
PERFORM 0005-GERAR-DETALHE UNTIL WRK-IND1 GREATER
COPY002A-QUANT-REG
PERFORM 0006-FECHA-ARQUIVO
PERFORM 9999-FINALIZAR
.
*----------------------------------------------------------------*
*> cobol-lint CL002 0000-end
0000-END. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
* ABERTURA DE ARQUIVO
*----------------------------------------------------------------*
0001-ABRE-ARQUIVO SECTION.
*----------------------------------------------------------------*
OPEN OUTPUT REL0001A-OUT
.
*----------------------------------------------------------------*
*> cobol-lint CL002 0001-end
0001-END. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
* OBTER DATA SISTEMA
*----------------------------------------------------------------*
0002-OBTER-DATA SECTION.
*----------------------------------------------------------------*
CALL 'PROGDATA' USING COD001A-REGISTRO
.
*----------------------------------------------------------------*
*> cobol-lint CL002 0002-end
0002-END. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
* OBTER DATA SISTEMA
*----------------------------------------------------------------*
0003-OBTER-TIME SECTION.
*----------------------------------------------------------------*
CALL 'PROGTIME' USING COD001A-REGISTRO
.
*----------------------------------------------------------------*
*> cobol-lint CL002 0003-end
0003-END. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
* GERAR CABECALHO RELATORIO
*----------------------------------------------------------------*
0004-GERAR-CABECALHO SECTION.
*----------------------------------------------------------------*
MOVE COD001A-DATA-ANO TO WRK-MASC-DATA-ANO
MOVE COD001A-DATA-MES TO WRK-MASC-DATA-MES
MOVE COD001A-DATA-DIA TO WRK-MASC-DATA-DIA
MOVE COD001A-HORA TO WRK-MASC-HORA
MOVE COD001A-MINUTO TO WRK-MASC-MIN
* DISPLAY WRK-REL0001A-LINHA
MOVE WRK-REL0001A-LINHA TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
MOVE WRK-IND-PAGINACAO TO WRK-REL0001A-PAG
MOVE WRK-MASC-DATA TO WRK-REL0001A-CAB1-DATA
* DISPLAY WRK-REL0001A-CAB1
MOVE WRK-REL0001A-CAB1 TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
MOVE WRK-MASC-TIME TO WRK-REL0001A-HORA
* DISPLAY WRK-REL0001A-CAB2
MOVE WRK-REL0001A-CAB2 TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
* DISPLAY WRK-REL0001A-LINHA
MOVE WRK-REL0001A-LINHA TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
ADD 04 TO WRK-IND-LINHA
.
*----------------------------------------------------------------*
*> cobol-lint CL002 0004-end
0004-END. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
* GERAR DETALHE DO RELATORIO
*----------------------------------------------------------------*
0005-GERAR-DETALHE SECTION.
*----------------------------------------------------------------*
IF WRK-IND-LINHA GREATER 10
MOVE ZEROS TO WRK-IND-LINHA
ADD 1 TO WRK-IND-PAGINACAO
* DISPLAY WRK-REL0001A-LINHA-BRANCO
MOVE WRK-REL0001A-LINHA-BRANCO
TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
ADD 1 TO WRK-IND-LINHA
PERFORM 0004-GERAR-CABECALHO
END-IF
MOVE COPY002A-NOME(WRK-IND1)
TO WRK-REL0001A-NOME
MOVE COPY002A-COD(WRK-IND1)
TO WRK-REL0001A-COD
* DISPLAY WRK-REL0001A-DET1
MOVE WRK-REL0001A-DET1 TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
MOVE COPY002A-DATA-NASC(WRK-IND1)
TO WRK-DATA-COMUM
MOVE WRK-DATA-COMUM(1:2) TO WRK-MASC-DATA-DIA
MOVE WRK-DATA-COMUM(3:2) TO WRK-MASC-DATA-MES
MOVE WRK-DATA-COMUM(5:4) TO WRK-MASC-DATA-ANO
MOVE WRK-MASC-DATA TO WRK-REL0001A-DATA-NASC
MOVE COPY002A-IDADE(WRK-IND1)
TO WRK-REL0001A-IDADE
* DISPLAY WRK-REL0001A-DET2
MOVE WRK-REL0001A-DET2 TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
MOVE COPY002A-CARGO(WRK-IND1)
TO WRK-REL0001A-CARGO
MOVE COPY002A-TELEFONE(WRK-IND1)
TO WRK-REL0001A-TELEFONE
MOVE COPY002A-EMAIL(WRK-IND1)
TO WRK-REL0001A-EMAIL
* DISPLAY WRK-REL0001A-DET3
MOVE WRK-REL0001A-DET3 TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
MOVE COPY002A-RUA(WRK-IND1)
TO WRK-REL0001A-RUA
* DISPLAY WRK-REL0001A-DET4
MOVE WRK-REL0001A-DET4 TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
MOVE COPY002A-CIDADE(WRK-IND1)
TO WRK-REL0001A-CIDADE
MOVE COPY002A-ESTADO(WRK-IND1)
TO WRK-REL0001A-ESTADO
MOVE COPY002A-CEP(WRK-IND1)
TO WRK-REL0001A-CEP
* DISPLAY WRK-REL0001A-DET5
MOVE WRK-REL0001A-DET5 TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
* DISPLAY WRK-REL0001A-LINHA
MOVE WRK-REL0001A-LINHA TO WRK-REL0001A-STRING
WRITE WRK-REL0001A-REGISTRO
ADD 1 TO WRK-IND1
ADD 05 TO WRK-IND-LINHA
.
*----------------------------------------------------------------*
*> cobol-lint CL002 0005-end
0005-END. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
* FINALIZAR PROGRAMA
*----------------------------------------------------------------*
0006-FECHA-ARQUIVO SECTION.
*----------------------------------------------------------------*
CLOSE REL0001A-OUT
.
*----------------------------------------------------------------*
*> cobol-lint CL002 0006-end
0006-END. EXIT.
*----------------------------------------------------------------*
*----------------------------------------------------------------*
* FINALIZAR PROGRAMA
*----------------------------------------------------------------*
9999-FINALIZAR SECTION.
*----------------------------------------------------------------*
DISPLAY 'RELATORIO GERADO COM SUCESSO!'
GOBACK
.
*----------------------------------------------------------------*
*> cobol-lint CL002 9999-end
9999-END. EXIT.
*----------------------------------------------------------------*