O FILE STATUS 39 ocorre quando existe alguma incompatibilidade entre as características do arquivo definidas no programa COBOL e as características reais do arquivo ou dataset utilizado durante a execução.
Em outras palavras, o programa espera encontrar um arquivo com determinada organização, tamanho ou formato de registro, mas o arquivo apresentado possui características diferentes.
Entre as causas mais comuns estão:
LRECL diferente do tamanho definido na FD;
Divergência entre registros fixos e variáveis;
ORGANIZATION diferente da organização real do arquivo;
Definição incorreta da chave de um arquivo indexado;
Uso de arquivo criado com características diferentes das esperadas;
DDNAME do JCL associado ao arquivo errado;
Diferença entre a definição do arquivo no programa e no catálogo;
Alteração do copybook sem recriação ou ajuste do arquivo.
Exemplo de definição com FILE STATUS: Código · COBOL
FD ARQUIVO-CLIENTES
RECORDING MODE IS F.
01 REGISTRO-CLIENTE.
05 CLIENTE-CODIGO PIC 9(06).
05 CLIENTE-NOME PIC X(40).
05 CLIENTE-CIDADE PIC X(30).
Nesse exemplo, o registro possui 76 posições. Portanto, o arquivo utilizado precisa ser compatível com essa definição.
O tratamento do status pode ser feito da seguinte forma: Código · COBOL
OPENINPUTARQUIVO-CLIENTESIFWS-FILE-STATUSNOT = "00"DISPLAY"ERRO NA ABERTURA DO ARQUIVO"DISPLAY"FILE STATUS: "WS-FILE-STATUSSTOPRUNEND-IF
Para investigar o FILE STATUS 39, verifique:
O tamanho total do registro definido na FD;
O LRECL e o RECFM do dataset;
A cláusula ORGANIZATION;
A definição da chave, caso o arquivo seja indexado;
O DDNAME utilizado pelo programa;
Se o arquivo foi recriado depois de alguma alteração no layout;
Se programa, copybook e arquivo estão utilizando a mesma versão do layout.
Em ambientes mainframe, também é importante consultar as mensagens do job no spool. Muitas vezes, a mensagem complementar apresenta detalhes que não aparecem somente no FILE STATUS.
Você já encontrou o FILE STATUS 39 em algum programa COBOL? Qual era a incompatibilidade e como resolveu?