Translate

Mostrar mensagens com a etiqueta DATA DIVISION. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta DATA DIVISION. Mostrar todas as mensagens

quinta-feira, 26 de setembro de 2024

O Guia Definitivo de Boas Práticas para Declarar Variáveis em COBOL Mainframe como os Grandes Bancos Fazem

 

Bellacosa Mainframe e o data division sem misterios

☕ Um Café no Bellacosa Mainframe

Data Division sem Mistérios

O Guia Definitivo de Boas Práticas para Declarar Variáveis em COBOL Mainframe como os Grandes Bancos Fazem

"Um programa COBOL raramente falha porque alguém escreveu um IF errado. Ele costuma falhar porque alguém declarou uma variável errada há vinte anos."


Introdução

Existe um velho ditado entre programadores de mainframe:

"O Procedure Division executa. A Data Division pensa."

Pode parecer exagero, mas basta passar alguns meses trabalhando em um grande banco para perceber que isso é verdade.

Quando um programa COBOL possui milhares de linhas, dezenas de interfaces, centenas de arquivos VSAM, tabelas DB2, chamadas CICS e APIs REST, o verdadeiro segredo não está apenas na lógica.

Está na organização dos dados.

É justamente por isso que os maiores bancos brasileiros possuem padrões extremamente rígidos para a Data Division.

Em muitos lugares, uma variável mal declarada simplesmente não passa pela revisão de código.

Neste artigo vamos aprender como profissionais experientes organizam suas variáveis, entender o motivo dessas regras existirem e descobrir como escrever programas que continuam fáceis de manter mesmo depois de décadas.

Pegue seu café.

Vamos organizar nossa memória principal.


Antes de falar de variáveis...

Imagine construir um prédio.

Você pode contratar o melhor pedreiro do mundo.

Se o engenheiro desenhar uma planta ruim, o prédio será um caos.

No COBOL acontece exatamente isso.

A Data Division é a planta do edifício.

A Procedure Division apenas utiliza aquilo que foi planejado.

Quanto melhor for sua estrutura de dados, mais simples será escrever toda a lógica do programa.


A filosofia dos grandes bancos

Em bancos, normalmente existem padrões semelhantes a estes:

  • nomes padronizados

  • agrupamentos claros

  • nenhuma variável "solta"

  • documentação implícita

  • facilidade para debug

  • facilidade para manutenção

  • reaproveitamento

O objetivo nunca é escrever menos.

É escrever melhor.


A estrutura clássica

Normalmente encontramos algo parecido.

WORKING-STORAGE SECTION.

01 WS-CONTROLE.

01 WS-ENTRADA.

01 WS-SAIDA.

01 WS-CALCULOS.

01 WS-INDICADORES.

01 WS-CONSTANTES.

01 WS-TABELAS.

01 WS-AREAS-DE-TRABALHO.

Só olhando os nomes já sabemos onde procurar qualquer informação.

Essa organização economiza horas de manutenção.


Prefixos fazem diferença

Um dos maiores erros de iniciantes é escrever:

01 NOME.
01 CPF.
01 IDADE.
01 TOTAL.

Imagine um programa com 8.000 variáveis.

Boa sorte.

Os grandes bancos normalmente utilizam prefixos.

WS-NOME
WS-CPF
WS-IDADE
WS-TOTAL

WS significa:

Working Storage.

Quando existem outras áreas:

LK-
DFHCOMMAREA
LS-
CS-
SQL-

Exemplo:

WS-CLIENTE

LK-CLIENTE

LS-CLIENTE

SQL-CLIENTE

Cada uma pertence a uma área diferente.

O nome já explica sua origem.


Nunca use nomes genéricos

Evite:

WS-AUX

WS-TEMP

WS-X

WS-DADOS

WS-AREA

WS-TESTE

Isso não explica absolutamente nada.

Prefira:

WS-SALDO-ATUAL

WS-VALOR-LIMITE

WS-TOTAL-PARCELAS

WS-QTD-CLIENTES

WS-DATA-PROCESSAMENTO

Quem ler o programa daqui a vinte anos agradecerá.


O padrão VERBO + OBJETO

Muitos bancos gostam de indicar o significado da variável.

Exemplo:

WS-QTD-PRODUTOS

WS-VLR-TOTAL

WS-DT-NASCIMENTO

WS-HR-PROCESSAMENTO

WS-FL-ATIVO

WS-CD-AGENCIA

WS-NR-CONTA

Observe as abreviações.

PrefixoSignificado
DTData
HRHora
FLFlag
CDCódigo
NRNúmero
QTDQuantidade
VLRValor
INDIndicador
TPTipo
DESCDescrição

Essas abreviações praticamente viraram um idioma próprio do mercado financeiro.


Os níveis da Data Division

Agora chegamos ao coração do COBOL.

Os famosos Levels.


Level 01

Representa um registro completo.

01 WS-CLIENTE.

Pense nele como uma pasta.

Dentro dela existirão documentos.


Level 05

Representa divisões principais.

01 WS-CLIENTE.

   05 WS-NOME.

   05 WS-CPF.

   05 WS-ENDERECO.

É o nível mais utilizado.


Level 10

Subdivisão.

05 WS-ENDERECO.

   10 WS-RUA.

   10 WS-NUMERO.

   10 WS-BAIRRO.

Level 15, 20, 25...

São apenas níveis hierárquicos.

01 CLIENTE

   05 ENDERECO

      10 CIDADE

         15 CEP

O COBOL não exige números específicos.

Apenas respeita a hierarquia.

Na prática, porém, muitos bancos adotam:

01

05

10

15

20

para manter um padrão visual.


Quando usar Level 77?

No passado era comum.

77 WS-CONTADOR PIC 9(4).

Hoje praticamente todos utilizam:

01 WS-CONTADOR PIC 9(4).

Ou agrupam dentro de áreas.

O uso do 77 tornou-se raro em novos projetos.


O poderoso Level 88

Um dos recursos mais elegantes do COBOL.

Imagine isso.

05 WS-STATUS PIC X.

88 WS-ATIVO VALUE "A".

88 WS-INATIVO VALUE "I".

Depois:

IF WS-ATIVO

Muito melhor que:

IF WS-STATUS = "A"

O código praticamente se transforma em português.

Outro exemplo.

88 WS-SIM VALUE "S".

88 WS-NAO VALUE "N".

Ou ainda:

88 WS-CONTA-CORRENTE VALUE "01".

88 WS-CONTA-POUPANCA VALUE "02".

Esse recurso é amplamente utilizado em bancos.


Agrupe informações relacionadas

Errado:

WS-NOME

WS-CPF

WS-RUA

WS-SALDO

WS-IDADE

WS-CIDADE

Correto.

01 WS-CLIENTE.

   05 WS-NOME.

   05 WS-CPF.

   05 WS-ENDERECO.

      10 WS-RUA.

      10 WS-CIDADE.

   05 WS-SALDO.

A estrutura fica muito mais intuitiva.


REDEFINES

Poucos recursos são tão poderosos.

Imagine um arquivo.

1234567890

Pode representar:

CPF

ou

Código interno

Não faz sentido duplicar memória.

Usamos:

01 WS-AREA.

   05 WS-DADOS PIC X(10).

01 WS-CPF REDEFINES WS-DADOS.

   05 WS-NUMERO PIC 9(10).

A memória é exatamente a mesma.

Apenas muda a interpretação.


Onde bancos usam REDEFINES?

Muito frequentemente em:

  • layouts CNAB

  • buffers CICS

  • mensagens MQ

  • áreas de comunicação

  • protocolos

  • APIs

  • conversões numéricas

  • interpretação de bytes


Cuidados com REDEFINES

Nunca faça isso sem entender o layout.

Porque alterar uma redefinição altera todas.

É literalmente a mesma memória.


RENAMES

Pouca gente conhece.

Exemplo.

01 WS-REGISTRO.

   05 WS-NOME.

   05 WS-ENDERECO.

   05 WS-CIDADE.

66 WS-DADOS-CADASTRAIS
RENAMES WS-NOME THRU WS-CIDADE.

Agora podemos manipular todo esse trecho como um único grupo lógico.

Hoje aparece menos que REDEFINES, mas ainda existe em sistemas legados e alguns frameworks internos.


CONSTANTES

Nunca escreva:

IF WS-TIPO = "A"

Prefira:

78 ATIVO VALUE "A".

IF WS-TIPO = ATIVO

Ou

01 WS-CONSTANTES.

   05 WS-TP-ATIVO VALUE "A".

   05 WS-TP-INATIVO VALUE "I".

O significado fica explícito.


PIC correto faz diferença

Texto.

PIC X(30)

Numérico.

PIC 9(5)

Decimal.

PIC S9(9)V99 COMP-3

Valor monetário.

PIC S9(11)V99 COMP-3

Nunca utilize texto para armazenar números quando eles serão calculados.


COMP, COMP-3 e DISPLAY

Nos bancos é comum encontrar a seguinte estratégia:

DISPLAY

para entrada e saída.

COMP

para cálculos inteiros.

COMP-3

para valores financeiros.

Exemplo.

05 WS-SALDO
PIC S9(11)V99 COMP-3.

Além de economizar espaço, melhora desempenho e precisão decimal.


Inicialização

Sempre inicialize.

VALUE ZERO.

VALUE SPACES.

VALUE LOW-VALUES.

VALUE HIGH-VALUES.

Ou utilize

INITIALIZE

Evite depender do conteúdo anterior da memória.


Um erro clássico

05 WS-NOME PIC X(30).

Depois.

MOVE "JOAO" TO WS-NOME

Comparação.

IF WS-NOME = "JOAO"

Pode funcionar.

Pode não funcionar.

Por quê?

Porque existem espaços restantes.

Muitos bancos utilizam:

FUNCTION TRIM

ou

INSPECT

para evitar problemas.


Tabelas OCCURS

Sempre nomeie corretamente.

05 WS-CLIENTES OCCURS 100 TIMES.

   10 WS-NOME.

   10 WS-SALDO.

Índices separados.

77 WS-IDX PIC S9(4) COMP.

Ou

INDEXED BY IDX-CLIENTE

Muito mais eficiente.


Evite mágicas

Nunca faça:

MOVE 1 TO WS-X.

Depois.

IF WS-X = 1

Prefira.

88 WS-PROCESSADO VALUE 1.

Muito mais legível.


Organização visual

Bancos normalmente alinham tudo.

05 WS-NOME            PIC X(40).

05 WS-CPF             PIC 9(11).

05 WS-SALDO           PIC S9(09)V99 COMP-3.

05 WS-DATA-NASC       PIC 9(08).

Pode parecer detalhe.

Mas melhora muito a leitura.


Comentários úteis

Evite.

* Nome.

Prefira.

* Dados recebidos do cadastro central.

* Área utilizada para integração com PIX.

* Buffer utilizado pelo CICS.

Explique o motivo.

Não o óbvio.


╔══════════════════════════════════════════════════════════════════════╗
║                     COBOL DATA DIVISION                             ║
║               "Tudo começa pelos dados."                            ║
╚══════════════════════════════════════════════════════════════════════╝

                       PROGRAMA COBOL
                             │
                             ▼
                  WORKING-STORAGE SECTION
                             │
        ┌────────────────────┼────────────────────┐
        │                    │                    │
        ▼                    ▼                    ▼
   WS-CONTROLE          WS-ENTRADA          WS-SAÍDA
        │                    │                    │
        ▼                    ▼                    ▼
     Variáveis           Arquivos           Resultados
     de Trabalho         Entrada            Processados



              Hierarquia dos Levels (Níveis)

01 WS-CLIENTE
│
├──05 WS-DADOS-PESSOAIS
│    ├──10 WS-NOME
│    ├──10 WS-CPF
│    └──10 WS-DATA-NASCIMENTO
│
├──05 WS-ENDERECO
│    ├──10 WS-RUA
│    ├──10 WS-NUMERO
│    ├──10 WS-CIDADE
│    └──10 WS-CEP
│
└──05 WS-DADOS-BANCARIOS
     ├──10 WS-AGENCIA
     ├──10 WS-CONTA
     └──10 WS-SALDO


             Quanto maior o nível...
                   menor o detalhe.

        01  → Registro completo
        05  → Grupo principal
        10  → Campo
        15  → Subcampo
        20+ → Especializações



                Organização Recomendada

                 +-------------------+
                 |   01 WS-CLIENTE   |
                 +-------------------+
                          │
          ┌───────────────┼───────────────┐
          ▼               ▼               ▼
     IDENTIFICAÇÃO    ENDEREÇO       FINANCEIRO
          │               │               │
          ▼               ▼               ▼
     CPF / Nome      Rua / CEP     Conta / Saldo



                Prefixos Mais Utilizados

WS-  → Working Storage
LK-  → Linkage Section
LS-  → Local Storage
DFH- → CICS
SQL- → DB2
IX-  → Índice
CT-  → Constante
FL-  → Flag
TP-  → Tipo
DT-  → Data
HR-  → Hora
NR-  → Número
CD-  → Código
VLR- → Valor
QTD- → Quantidade



            REDEFINES (Mesma memória)

          +-------------------------+
          |      WS-DADOS           |
          |        X(20)            |
          +-------------------------+
                    ▲
                    │
         REDEFINES  │
                    │
          +-------------------------+
          |       WS-CPF            |
          |        9(20)            |
          +-------------------------+

      Uma única área de memória.
      Duas interpretações diferentes.



             RENAMES (Grupo Lógico)

01 WS-REGISTRO
│
├──05 WS-NOME
├──05 WS-ENDERECO
├──05 WS-CIDADE
└──05 WS-CEP

          │
          ▼

66 WS-DADOS-CADASTRAIS
   RENAMES WS-NOME THRU WS-CEP



             Nível 88 (Legibilidade)

        +-------------------+
        | WS-STATUS    PIC X|
        +-------------------+
               │
        ┌──────┴──────┐
        ▼             ▼
88 WS-ATIVO      88 WS-INATIVO
 VALUE "A"         VALUE "I"

Ao invés de:

IF STATUS = "A"

Escrevemos:

IF WS-ATIVO



              O Fluxo de uma Variável

 Declaração
      │
      ▼
 Inicialização
      │
      ▼
 Validação
      │
      ▼
 Processamento
      │
      ▼
 Saída
      │
      ▼
 Encerramento



      O que um iniciante costuma fazer...

WS-X
WS-AUX
WS-TEMP
WS-AREA
WS-DADOS

                 😢



      O que um profissional faz...

WS-VLR-SALDO-ATUAL
WS-DT-PROCESSAMENTO
WS-QTD-CLIENTES
WS-FL-CONTA-ATIVA
WS-CD-AGENCIA

                 😎



╔════════════════════════════════════════════════════════════╗
║ "Programas envelhecem. Dados permanecem."                 ║
║                                                           ║
║ Quanto melhor a Data Division...                          ║
║ ...mais simples será todo o restante do programa.         ║
╚════════════════════════════════════════════════════════════╝ .


Os erros mais comuns dos iniciantes

  • Variáveis com nomes sem significado.

  • Misturar entrada, saída e trabalho na mesma área.

  • Não utilizar grupos.

  • Declarar tudo como PIC X.

  • Ignorar COMP-3 para valores monetários.

  • Não utilizar nível 88.

  • Criar dezenas de variáveis AUX.

  • Usar REDEFINES sem conhecer o layout.

  • Não inicializar variáveis.

  • Declarar estruturas sem padronização.

  • Copiar layouts diferentes para a mesma área.

  • Esquecer alinhamento e organização.


O estado da arte em 2024

Embora o COBOL tenha mais de seis décadas, a Data Division continua evoluindo.

Nos ambientes modernos do IBM Enterprise COBOL 6.x e z/OS 3.1, as melhores práticas incluem:

  • nomes semânticos e consistentes;

  • estruturas alinhadas a modelos de negócio;

  • uso intensivo de COPYBOOKs compartilhados para evitar duplicação;

  • integração com JSON, XML e APIs REST preservando tipos corretos;

  • preferência por COMP-3 para valores financeiros e COMP/BINARY para cálculos;

  • uso de USAGE INDEX, 88-level, INITIALIZE e funções intrínsecas;

  • validação por ferramentas de análise estática como IBM Application Delivery Foundation, SonarQube (quando integrado) e padrões internos de qualidade.

Em muitos bancos, nenhuma variável nasce por acaso. Ela segue convenções documentadas, passa por revisão técnica e, frequentemente, é reutilizada por dezenas ou centenas de programas por meio de copybooks corporativos. Isso reduz erros, facilita integrações e garante consistência entre sistemas.


Curiosidades

  • O COBOL foi criado em 1959, e sua estrutura hierárquica de dados influenciou diversas linguagens posteriores.

  • Muitos layouts bancários brasileiros (CNAB 240 e 400 posições) dependem diretamente de grupos de níveis (01, 05, 10...) para mapear registros.

  • REDEFINES foi um dos primeiros mecanismos eficientes de reutilização de memória da história das linguagens comerciais.

  • Grandes bancos possuem programas com mais de 40 anos em produção cujas declarações de variáveis permanecem praticamente inalteradas, justamente porque foram bem projetadas desde o início.


A Filosofia Bellacosa Mainframe

Imagine uma biblioteca.

Cada livro possui uma prateleira.

Cada prateleira possui uma categoria.

Cada categoria possui uma etiqueta.

Agora imagine uma biblioteca onde todos os livros estão jogados no chão.

Ambas funcionam.

Mas apenas uma continua funcionando depois de cinquenta anos.

A Data Division é essa biblioteca.

Cada variável é um livro.

Cada nível é uma prateleira.

Cada nome é uma etiqueta.

Quando você declara uma variável pensando apenas no programa de hoje, escreve código.

Quando a declara pensando no colega que fará manutenção daqui a vinte anos, constrói engenharia de software.

E é exatamente essa mentalidade que diferencia um programador COBOL de um verdadeiro profissional de mainframe.

No fim das contas, programas mudam, regras de negócio evoluem e tecnologias se renovam. Uma Data Division bem organizada, porém, continua sendo uma das maiores demonstrações de maturidade técnica que um desenvolvedor pode deixar como legado.


quinta-feira, 8 de fevereiro de 2007

Leitura de Dataset no COBOL

Bellacosa Mainframe e a leitura de dados de um dataset cobol


Leitura de Dataset no COBOL

Uma das funções mais importantes do COBOL no mainframe é:

processamento de arquivos.

Grande parte dos sistemas batch trabalha lendo:

  • datasets sequenciais;

  • VSAM;

  • arquivos financeiros;

  • relatórios;

  • cargas;

  • integrações.

Por isso, entender:

  • ENVIRONMENT DIVISION;

  • DATA DIVISION;

  • FILE SECTION;

  • FILE STATUS;

  • layouts;

  • associação com JCL;

é fundamental no ambiente:

IBM Z / zOS.


Fluxo geral da leitura de arquivos

JCL
 ↓
DDNAME
 ↓
ENVIRONMENT DIVISION
 ↓
SELECT / ASSIGN
 ↓
FILE SECTION
 ↓
FD
 ↓
READ
 ↓
PROCESSAMENTO

Onde o arquivo é definido no COBOL?

Principalmente em:

  • ENVIRONMENT DIVISION;

  • DATA DIVISION.


ENVIRONMENT DIVISION

Responsável por:

ambiente e associação dos arquivos.


Estrutura clássica

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

O que é FILE-CONTROL?

Área onde o COBOL:

associa arquivos lógicos ao JCL.


Exemplo

SELECT ARQCLIENTE
ASSIGN TO CLIENTE
ORGANIZATION IS SEQUENTIAL.

Explicando

ElementoFunção
ARQCLIENTENome lógico COBOL
CLIENTEDDNAME do JCL
SEQUENTIALOrganização arquivo

O que é ASSIGN?

Faz ligação entre:

  • COBOL;

  • JCL.


Relação COBOL ↔ JCL

COBOL: ASSIGN TO CLIENTE
            ↓
JCL: //CLIENTE DD DSN=...

Exemplo completo no JCL

//STEP1 EXEC PGM=COBPGM

//CLIENTE DD DSN=EMPRESA.CLIENTES,
//            DISP=SHR

Como COBOL encontra o dataset?

Pelo:

DDNAME.


DATA DIVISION

Responsável pelos:

dados e layouts.


Estrutura típica

DATA DIVISION.

FILE SECTION.

O que é FILE SECTION?

Define:

layout do arquivo.


Exemplo

FD ARQCLIENTE.

01 REG-CLIENTE.
   05 CLI-ID       PIC 9(5).
   05 CLI-NOME     PIC X(30).
   05 CLI-SALDO    PIC 9(7)V99.

O que é FD?

File Description

Define:

  • características;

  • layout;

  • estrutura registro.


O que é REG-CLIENTE?

Área memória usada no:

READ.


Fluxo do READ

READ ARQCLIENTE
      ↓
registro carregado
      ↓
REG-CLIENTE preenchido

Exemplo simples de leitura

READ ARQCLIENTE

Leitura completa correta

READ ARQCLIENTE
   AT END
      MOVE 'S' TO EOF
END-READ

O que é EOF?

End Of File

Fim arquivo.


Controle clássico batch

PERFORM UNTIL EOF = 'S'

   READ ARQCLIENTE
      AT END
         MOVE 'S' TO EOF

      NOT AT END
         PERFORM PROCESSA

   END-READ

END-PERFORM

O que é FILE STATUS?

Código retorno da operação arquivo.

Muito importante no COBOL.


Definição FILE STATUS

Fica na:

WORKING-STORAGE.


Exemplo

01 WS-FS-CLIENTE PIC XX.

Associando FILE STATUS

SELECT ARQCLIENTE
ASSIGN TO CLIENTE
FILE STATUS IS WS-FS-CLIENTE.

O que ele faz?

Após:

  • OPEN;

  • READ;

  • WRITE;

  • CLOSE;

o COBOL grava:

status da operação.


Exemplo status comuns

StatusSignificado
00OK
10EOF
35Arquivo inexistente
39Layout incompatível
92Erro lógico
93Arquivo não aberto

Exemplo validação

IF WS-FS-CLIENTE NOT = '00'
   DISPLAY 'ERRO ARQUIVO'
END-IF

O que é OPEN?

Abre arquivo.


Exemplos

OPEN INPUT ARQCLIENTE

Leitura.


OPEN OUTPUT ARQREL

Saída.


OPEN I-O ARQVSAM

Leitura e gravação.


O que é CLOSE?

Fecha arquivo.


Exemplo

CLOSE ARQCLIENTE

Tipos comuns de arquivos COBOL


Sequential

Sequencial.


Indexed

VSAM KSDS.


Relative

Acesso relativo.


Line Sequential

Texto.


Organização do arquivo

ORGANIZATION IS SEQUENTIAL

Acesso

ACCESS MODE IS SEQUENTIAL

Exemplo completo

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

SELECT ARQCLIENTE
ASSIGN TO CLIENTE
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS WS-FS.

DATA DIVISION.

FILE SECTION.

FD ARQCLIENTE.

01 REG-CLIENTE.
   05 CLI-ID     PIC 9(5).
   05 CLI-NOME   PIC X(30).

WORKING-STORAGE SECTION.

01 WS-FS         PIC XX.
01 EOF           PIC X VALUE 'N'.

PROCEDURE DIVISION.

MAIN.

   OPEN INPUT ARQCLIENTE

   PERFORM UNTIL EOF = 'S'

      READ ARQCLIENTE
         AT END
            MOVE 'S' TO EOF

         NOT AT END
            DISPLAY CLI-NOME

      END-READ

   END-PERFORM

   CLOSE ARQCLIENTE

   STOP RUN.

O que é layout?

Estrutura do registro.


Exemplo

12345JOAO SILVA                 0001500

Layout correspondente

05 ID     PIC 9(5).
05 NOME   PIC X(30).
05 SALDO  PIC 9(7).

O que acontece se layout estiver errado?

Pode causar:

  • lixo dados;

  • truncamento;

  • ABEND;

  • S0C7.


COBOL e JCL trabalham juntos


JCL

Entrega dataset.


COBOL

Processa dataset.


Fluxo real

Dataset
 ↓
JCL DD
 ↓
ASSIGN
 ↓
READ
 ↓
REGISTRO MEMÓRIA
 ↓
PROCESSAMENTO

O que é DISP=SHR?

Compartilhado.


O que é DISP=OLD?

Uso exclusivo.


Como isso aparece no batch?

Praticamente em:

  • bancos;

  • folha salarial;

  • PIX;

  • cartões;

  • faturamento.


Curiosidades incríveis

1. Muitos batchs processam bilhões de registros COBOL diariamente


2. FILE STATUS evita muitos ABENDs


3. Grande parte do mundo financeiro ainda depende fortemente de arquivos sequenciais


4. JCL + COBOL é uma das integrações mais clássicas do mainframe


Erros comuns de iniciantes


1. Esquecer OPEN


2. Não tratar FILE STATUS


3. Layout incompatível


4. DDNAME diferente do ASSIGN


5. Não controlar EOF


Dicas importantes

Sempre trate FILE STATUS


Controle EOF corretamente


Valide layouts


Nomeie DDNAME claramente


Resumo rápido

ElementoFunção
SELECTDefine arquivo lógico
ASSIGNLiga ao JCL
FDDefine layout
READLê registro
FILE STATUSRetorno operação
OPENAbre arquivo
CLOSEFecha arquivo
EOFFim arquivo

Conclusão

A leitura de arquivos é uma das bases do COBOL batch no ambiente mainframe IBM Z.

ENVIRONMENT DIVISION, DATA DIVISION, FILE SECTION, FILE STATUS e integração com JCL permitem processar grandes volumes de dados com segurança, organização e alta confiabilidade no z/OS. 

segunda-feira, 5 de fevereiro de 2007

Estrutura de um Programa COBOL

 

Bellacosa Mainframe e o esqueleto de um programa COBOL conheça sua estrutura

Estrutura de um Programa COBOL

O COBOL foi criado para desenvolver:

  • sistemas corporativos;

  • processamento batch;

  • aplicações financeiras;

  • sistemas bancários;

  • processamento online.

Uma das maiores características do COBOL é sua:

organização estrutural.

Os programas são divididos em:

  • DIVISIONs;

  • SECTIONs;

  • PARAGRAPHs;

  • STATEMENTs.

Isso torna o COBOL:

  • legível;

  • modular;

  • organizado;

  • ideal para sistemas gigantes no mainframe IBM Z.


Estrutura clássica de um programa COBOL

IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.

Fluxo lógico

DIVISION
   ↓
SECTION
   ↓
PARAGRAPH
   ↓
STATEMENTS

1. IDENTIFICATION DIVISION

Responsável pela:

identificação do programa.


Contém:

  • nome;

  • autor;

  • comentários;

  • versão.


Exemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. CLIENTE.
AUTHOR. BELLACOSA.

2. ENVIRONMENT DIVISION

Define:

ambiente de execução.


Contém:

  • arquivos;

  • devices;

  • datasets;

  • configurações.


SECTIONs principais

CONFIGURATION SECTION
INPUT-OUTPUT SECTION

Exemplo

SELECT ARQCLI
ASSIGN TO CLIENTE.

3. DATA DIVISION

Define:

dados e variáveis.


SECTIONs mais usadas


FILE SECTION

Layouts de arquivos.


WORKING-STORAGE SECTION

Variáveis internas.


LINKAGE SECTION

Parâmetros recebidos.


LOCAL-STORAGE SECTION

Variáveis locais temporárias.


Exemplo

01 WS-NOME PIC X(30).
01 WS-SALDO PIC 9(9)V99.

4. PROCEDURE DIVISION

Contém:

toda lógica do programa.


Aqui ficam:

  • IF;

  • PERFORM;

  • READ;

  • WRITE;

  • COMPUTE;

  • loops;

  • regras negócio.


Exemplo

PROCEDURE DIVISION.

MAIN.
   DISPLAY 'OLA'.
   STOP RUN.

O que são SECTIONs?

SECTIONs são:

subdivisões dentro das DIVISIONs.


Exemplo

WORKING-STORAGE SECTION.

O que são PARAGRAPHs?

Blocos menores de lógica.


Exemplo

CALCULAR-JUROS.

O que são STATEMENTs?

São:

comandos COBOL executáveis.


Exemplos

MOVE
DISPLAY
IF
PERFORM
READ
WRITE
COMPUTE

Principais comandos COBOL


MOVE

Movimenta dados.

MOVE 100 TO WS-VALOR

DISPLAY

Mostra mensagens.

DISPLAY 'PROCESSANDO'

IF

Decisão lógica.

IF SALDO > 0

EVALUATE

Similar ao CASE.


PERFORM

Executa rotina/repetição.

PERFORM CALCULAR

READ

Lê arquivos.


WRITE

Grava registros.


REWRITE

Atualiza registro VSAM.


DELETE

Remove registro.


COMPUTE

Realiza cálculos.


CALL

Chama subprograma.


STOP RUN

Finaliza programa.


Tipos de programas COBOL


1. Programa Batch

Executado via:

  • JCL;

  • JES2;

  • scheduler.


Características

  • processamento lote;

  • arquivos;

  • relatórios;

  • milhões registros.


Fluxo típico

LER
 ↓
VALIDAR
 ↓
PROCESSAR
 ↓
GERAR RELATÓRIO

Exemplo JCL

//STEP1 EXEC PGM=COBPGM

2. Programa Online

Executado interativamente.

Muito usado em:

CICS.


Exemplos

  • caixa eletrônico;

  • consulta saldo;

  • PIX;

  • cartão.


Características

  • resposta rápida;

  • transacional;

  • online;

  • interação usuário.


Exemplo CICS

EXEC CICS SEND

3. Programa Aninhado (Nested Program)

Programa dentro de outro programa.


Exemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. PAI.

IDENTIFICATION DIVISION.
PROGRAM-ID. FILHO.

Vantagens

  • encapsulamento;

  • compartilhamento variáveis.


Muito usado em COBOL moderno


4. Programa Recursivo

Programa que:

chama a si mesmo.


Exemplo

CALL 'PROG1'

dentro do próprio:

PROG1

Necessita:

RECURSIVE

Muito menos comum no COBOL tradicional


Exemplo

PROGRAM-ID. FAT RECURSIVE.

5. Subprograma

Programa chamado por outro programa.


Exemplo

CALL 'CALCSAL'

Muito comum em:

  • modularização;

  • regras compartilhadas.


6. Programa Conversacional

Muito usado em CICS.

Mantém “estado” entre telas.


O que é modularização?

Dividir sistema em:

  • pequenos programas;

  • rotinas;

  • serviços.


Benefícios

  • manutenção;

  • reutilização;

  • organização.


O que é copybook?

Arquivo reutilizável.


Exemplo

COPY CLIENTE.

Muito usado para layouts


O que é PIC?

Define formato campo.


Exemplos

PIC X(20)

Texto.


PIC 9(5)

Número.


O que é COMP-3?

Formato numérico compactado.

Muito usado em:

processamento financeiro.


O que é EOF?

End Of-File

Fim do arquivo.


Exemplo loop batch

PERFORM UNTIL EOF='S'

Como COBOL aparece no dia a dia?

Praticamente em:

  • bancos;

  • PIX;

  • cartões;

  • folha salarial;

  • seguros;

  • faturamento.


Curiosidades incríveis

1. Muitos programas COBOL possuem milhões de linhas


2. Sistemas COBOL podem funcionar décadas sem parar


3. COBOL moderno suporta APIs e cloud


4. Mainframes executam bilhões de transações COBOL diariamente


Erros comuns de iniciantes


1. Misturar lógica e variáveis


2. Criar PROCEDURE DIVISION gigantes


3. Não modularizar


4. Usar GO TO excessivamente


Resumo rápido

EstruturaFunção
DIVISIONGrande bloco
SECTIONSubdivisão
PARAGRAPHBloco lógico
STATEMENTComando
BatchProcessamento lote
OnlineProcessamento interativo
RecursiveChama si mesmo
NestedPrograma aninhado

Conclusão

A estrutura do COBOL foi criada para suportar sistemas corporativos enormes com organização, estabilidade e clareza.

DIVISIONs, SECTIONs, PARAGRAPHs e STATEMENTs permitem criar programas batch e online altamente confiáveis, fundamentais para o ambiente mainframe IBM Z.

domingo, 4 de fevereiro de 2007

O que são as DIVISIONS e SECTIONs do COBOL?

 

Bellacosa o que as divisions e section num programa COBOL

O que são as DIVISIONS e SECTIONs do COBOL?

Uma das primeiras coisas que chama atenção em COBOL é sua estrutura extremamente organizada.

Diferente de muitas linguagens modernas, o COBOL divide o programa em:

  • DIVISIONs;

  • SECTIONs;

  • PARAGRAPHs.

Isso ajuda a criar programas:

  • organizados;

  • legíveis;

  • fáceis de manter.

Especialmente em sistemas corporativos gigantes do:

mainframe IBM Z.


O que são DIVISIONs?

DIVISIONs são:

grandes blocos principais do programa COBOL.

Cada DIVISION possui:

uma responsabilidade específica.


Estrutura clássica COBOL

IDENTIFICATION DIVISION
ENVIRONMENT DIVISION
DATA DIVISION
PROCEDURE DIVISION

Analogia simples

Imagine um prédio corporativo.

Cada andar possui uma função:

  • administração;

  • arquivos;

  • dados;

  • operações.

As DIVISIONs funcionam exatamente assim.


Fluxo lógico do COBOL

IDENTIFICATION
      ↓
ENVIRONMENT
      ↓
DATA
      ↓
PROCEDURE

1. IDENTIFICATION DIVISION

Responsável pela:

identificação do programa.


Contém informações como:

  • nome do programa;

  • autor;

  • comentários;

  • data.


Exemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. CLIENTE.
AUTHOR. BELLACOSA.

O item mais importante

PROGRAM-ID

Define:

nome do programa COBOL.


2. ENVIRONMENT DIVISION

Define:

ambiente do programa.


Responsável por:

  • arquivos;

  • dispositivos;

  • configurações;

  • datasets.


Muito usada em batch


SECTIONs principais

CONFIGURATION SECTION
INPUT-OUTPUT SECTION

CONFIGURATION SECTION

Define:

  • máquina;

  • compilador;

  • ambiente.


Exemplo

CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-Z.
OBJECT-COMPUTER. IBM-Z.

INPUT-OUTPUT SECTION

Define:

arquivos do programa.


Exemplo

SELECT CLIENTE
ASSIGN TO ARQCLI.

3. DATA DIVISION

Uma das partes mais importantes.

Responsável pelos:

dados e variáveis.


Aqui ficam:

  • layouts;

  • variáveis;

  • tabelas;

  • áreas de memória;

  • copybooks.


SECTIONs mais famosas


FILE SECTION

Layouts de arquivos.


WORKING-STORAGE SECTION

Variáveis internas.


LINKAGE SECTION

Parâmetros recebidos.


Exemplo FILE SECTION

FD ARQCLIENTE.

01 REG-CLIENTE.
   05 NOME PIC X(30).
   05 SALDO PIC 9(9)V99.

O que é FD?

File Description

Define estrutura do arquivo.


Exemplo WORKING-STORAGE

01 WS-TOTAL PIC 9(9)V99.

O prefixo WS significa:

Working Storage.


Exemplo LINKAGE SECTION

01 LK-CLIENTE PIC X(10).

Muito usada em:

  • CALL;

  • subprogramas;

  • CICS.


O que é PIC?

Define formato do campo.


Exemplos

PIC X(20)

Texto.


PIC 9(5)

Número.


4. PROCEDURE DIVISION

Aqui fica:

a lógica do programa.


É o “cérebro” do COBOL.


Contém:

  • IF;

  • PERFORM;

  • READ;

  • WRITE;

  • COMPUTE;

  • loops;

  • processamento.


Exemplo

PROCEDURE DIVISION.

MAIN.
   DISPLAY 'OLA'.
   STOP RUN.

O que são SECTIONs?

SECTIONs são:

subdivisões dentro das DIVISIONs.


Elas organizam ainda mais o programa.


Exemplo

WORKING-STORAGE SECTION.

O que são PARAGRAPHs?

Pequenos blocos de lógica.


Exemplo

CALCULAR-TOTAL.

Hierarquia do COBOL

DIVISION
   ↓
SECTION
   ↓
PARAGRAPH
   ↓
STATEMENTS

Exemplo completo simplificado

IDENTIFICATION DIVISION.
PROGRAM-ID. TESTE.

DATA DIVISION.

WORKING-STORAGE SECTION.
01 WS-NOME PIC X(20).

PROCEDURE DIVISION.

MAIN.
   MOVE 'VAGNER' TO WS-NOME
   DISPLAY WS-NOME
   STOP RUN.

Como isso aparece no batch?

Muito comum:

READ ARQUIVO
 ↓
VALIDAR
 ↓
PROCESSAR
 ↓
WRITE RELATORIO

Tudo dentro da:

PROCEDURE DIVISION.


Como as DIVISIONs ajudam?

Elas tornam o código:

  • organizado;

  • modular;

  • legível;

  • padronizado.


Por que COBOL é tão organizado?

Porque foi criado para:

sistemas corporativos gigantes.


Grandes programas COBOL possuem:

  • milhares de linhas;

  • dezenas de SECTIONs;

  • centenas de PARAGRAPHs.


Curiosidades incríveis

1. O COBOL foi uma das primeiras linguagens extremamente organizadas


2. Muitas linguagens modernas herdaram ideias de modularização do COBOL


3. Sistemas bancários enormes dependem dessa organização


4. Grandes programas COBOL podem ter centenas de SECTIONs


Erros comuns de iniciantes


1. Misturar lógica na DATA DIVISION


2. Criar PROCEDURE DIVISION gigantesca


3. Não modularizar PARAGRAPHs


4. Confundir FILE SECTION com WORKING-STORAGE


Dicas importantes

Organize variáveis claramente


Separe lógica em PARAGRAPHs pequenos


Nomeie SECTIONs corretamente


Mantenha PROCEDURE DIVISION organizada


Como isso aparece no dia a dia?

Praticamente em:

  • COBOL batch;

  • CICS;

  • DB2;

  • sistemas bancários;

  • processamento financeiro.


Resumo rápido

EstruturaFunção
IDENTIFICATION DIVISIONIdentificação
ENVIRONMENT DIVISIONAmbiente/arquivos
DATA DIVISIONVariáveis/layouts
PROCEDURE DIVISIONLógica
SECTIONSubdivisão
PARAGRAPHBloco lógico

Conclusão

As DIVISIONs e SECTIONs são a base estrutural do COBOL.

Elas organizam programas em áreas específicas de identificação, ambiente, dados e lógica, permitindo criar sistemas corporativos extremamente organizados e confiáveis no ambiente mainframe IBM Z.