7
respostas

O comando "ERASE EOL" para a linha do erro não está funcionando para mim. Fiz conforme abaixo e a linha não é toda preenchida:

02 MSG-ERRO.
               10 LINE 16 COLUMN 1 ERASE EOL 
                   BACKGROUND-COLOR 3.
               10 LINE 16 COLUMN 10 PIC X(30)
                    BACKGROUND-COLOR 3 
                   FROM WRK-MSGERRO.
               10 COLUMN PLUS 2 PIC X(01)
                   BACKGROUND-COLOR 3 
                   USING WRK-TECLA.
7 respostas

Filipe,

Voce inclui o nivel 01 e é ele que chama na procedure ?

   01  MOSTRA-ERRO.
       02 MSG-ERRO.
          10 LINE 16 COLUMN 01 ERASE EOL
             BACKGROUND-COLOR 3.
          10 LINE 16 COLUMN 10 PICTURE X(30)
                     BACKGROUND-COLOR 3
                     FROM WRK-MGSERRO.
          10 COLUMN PLUS 2 PICTURE X(01)
                     BACKGROUND-COLOR 3
                     USING WRK-TECLA.

Ivan

Sim. Faço a chamada na PROCEDURE DIVISION assim:

WRITE CLIENTES-REG
               INVALID KEY
                   MOVE 'JA EXISTE ! (N)OVO REGISTRO ?' TO WRK-MSGERRO
                   ACCEPT MOSTRA-ERRO

Ele simplesmente ignora o comando. Para ter um efeito semelhante, deixei conforme abaixo:

01 MOSTRA-ERRO.
           02 MSG-ERRO.
               10 LINE 16 COLUMN 01 PIC X(80)
                   BACKGROUND-COLOR 3.

Curioso é que estou usando esse mesmo recurso ("ERASE EOL") para pintar a linha toda do cabeçalho da tela e está funcionando perfeitamente. Obs.: Estou rodando em um PC com Windows 10 e OpenCobolIDE na versão 4.7.6.

Pode enviar o código completo, por favor ?

Vou rodar por aqui.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CLIENTES.
      *****************************************************************
      * OBJETIVO: SISTEMA PARA GESTAO DE CLIENTES
      * AUTHOR = FILIPE-DEMOLIDOR
      *****************************************************************
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
           DECIMAL-POINT IS COMMA.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT CLIENTES ASSIGN TO 'C:\COBOL2\CLIENTES.DAT'
             ORGANIZATION IS INDEXED
             ACCESS MODE IS RANDOM
             FILE STATUS IS CLIENTES-STATUS
             RECORD KEY  IS CLIENTES-CHAVE.
       DATA DIVISION.
       FILE SECTION.
       FD CLIENTES.
       01 CLIENTES-REG.
           05 CLIENTES-CHAVE.
               10 CLIENTES-FONE PIC 9(09).
           05 CLIENTES-NOME     PIC X(30).
           05 CLIENTES-EMAIL    PIC X(40).
       WORKING-STORAGE SECTION.
       77 WRK-MODULO              PIC X(25).
       77 WRK-MSGERRO             PIC X(30).
       77 WRK-OPCAO               PIC X(01).
       77 WRK-OPCAO-RELATORIO     PIC X(01).
       77 WRK-TECLA               PIC X(01).
       77 CLIENTES-STATUS         PIC 9(02).

       SCREEN SECTION.
       01 TELA.
           05 LIMPA-TELA.
               10 BLANK SCREEN.
               10 LINE 1 COLUMN 1 ERASE EOL
                 BACKGROUND-COLOR 3.
               10 LINE 1 COLUMN 25 PIC X(29)
                 BACKGROUND-COLOR 3 FOREGROUND-COLOR 0
                 FROM 'SISTEMA DE GESTAO DE CLIENTES'.
               10 LINE 2 COLUMN 1 PIC X(25) ERASE EOL
                 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7 FROM WRK-MODULO.

       01 MENU.
           05 LINE 07 COLUMN 15 VALUE '1 - INCLUIR'.
           05 LINE 08 COLUMN 15 VALUE '2 - CONSULTAR'.
           05 LINE 09 COLUMN 15 VALUE '3 - ALTERAR'.
           05 LINE 10 COLUMN 15 VALUE '4 - EXCLUIR'.
           05 LINE 11 COLUMN 15 VALUE '5 - RELATORIO'.
           05 LINE 12 COLUMN 15 VALUE 'X - SAIDA'.
           05 LINE 13 COLUMN 15 VALUE 'OPCAO ====> '.
           05 LINE 13 COLUMN 27 USING WRK-OPCAO.

       01 MENU-RELATORIO.
           05 LINE 12 COLUMN 55 VALUE '1 - EM TELA'.
           05 LINE 13 COLUMN 55 VALUE '2 - EM DISCO'.
           05 LINE 14 COLUMN 55 VALUE 'OPCAO =====> '.
           05 LINE 14 COLUMN 68 USING WRK-OPCAO-RELATORIO.

       01 TELA-REGISTRO.
           05 CHAVE FOREGROUND-COLOR 2.
               10 LINE 10 COLUMN 10 VALUE 'TELEFONE '.
               10 COLUMN PLUS 2 PIC 9(09) USING CLIENTES-FONE
                   BLANK WHEN ZEROS.
           05 SS-DADOS.
               10 LINE 11 COLUMN 10 VALUE 'NOME.... '.
               10 COLUMN PLUS 2 PIC X(30) USING CLIENTES-NOME.
               10 LINE 12 COLUMN 10 VALUE 'E-MAIL.. '.
               10 COLUMN PLUS 2 PIC X(40) USING CLIENTES-EMAIL.

       01 MOSTRA-ERRO.
           02 MSG-ERRO.
               10 LINE 16 COLUMN 01 ERASE EOL 
                   BACKGROUND-COLOR 3.
               10 LINE 16 COLUMN 10 PIC X(30)
                    BACKGROUND-COLOR 3
                   FROM WRK-MSGERRO.
               10 COLUMN PLUS 2 PIC X(01)
                   BACKGROUND-COLOR 3
                   USING WRK-TECLA.

       PROCEDURE DIVISION.
       0001-PRINCIPAL SECTION.
           PERFORM 1000-INICIAR    THRU 1100-MONTAMENU.
           PERFORM 2000-PROCESSAR  UNTIL WRK-OPCAO = 'X'.
           PERFORM 3000-FINALIZAR.
           STOP RUN.

       1000-INICIAR.
           OPEN I-O CLIENTES
             IF CLIENTES-STATUS = 35 THEN
                 OPEN OUTPUT CLIENTES
                 CLOSE CLIENTES
                 OPEN I-O CLIENTES
             END-IF.

       1100-MONTAMENU.
           MOVE ' - MENU - ' TO WRK-MODULO.
           DISPLAY TELA.
           ACCEPT  MENU.

       2000-PROCESSAR.
           PERFORM 2100-LIMPAVALORES.
           EVALUATE WRK-OPCAO
             WHEN 1
               PERFORM 5000-INCLUIR
             WHEN 2
               PERFORM 6000-CONSULTAR
             WHEN 3
               PERFORM 7000-ALTERAR
             WHEN 4
               PERFORM 8000-EXCLUIR
             WHEN 5
               PERFORM 9000-RELATORIO
             WHEN OTHER
               IF WRK-OPCAO NOT EQUAL 'X'
                   DISPLAY 'ENTRE COM UMA OPCAO VALIDA'
               END-IF
           END-EVALUATE.
           PERFORM 2200-LIMPACONTROLES.
           PERFORM 1100-MONTAMENU.

       2100-LIMPAVALORES.
           MOVE ZEROS  TO CLIENTES-FONE.
           MOVE SPACES TO CLIENTES-NOME.
           MOVE SPACES TO CLIENTES-EMAIL.

       2200-LIMPACONTROLES.
           MOVE SPACES TO WRK-OPCAO.
           MOVE SPACES TO WRK-OPCAO-RELATORIO.
           MOVE SPACES TO WRK-TECLA.

       3000-FINALIZAR.
           CLOSE CLIENTES.

       5000-INCLUIR.
           MOVE 'MODULO - INCLUSAO -' TO WRK-MODULO.
           DISPLAY TELA.
           ACCEPT TELA-REGISTRO.
           WRITE CLIENTES-REG
               INVALID KEY
                   MOVE 'JA EXISTE ! (N)OVO REGISTRO ?' TO WRK-MSGERRO
                   ACCEPT MOSTRA-ERRO
               IF WRK-TECLA = 'N' OR WRK-TECLA = 'n'
                   MOVE ZEROS TO CLIENTES-FONE
                   PERFORM 5000-INCLUIR
               END-IF
           END-WRITE.

       6000-CONSULTAR.
           MOVE 'MODULO - CONSULTA -' TO WRK-MODULO.
           DISPLAY TELA.
             DISPLAY TELA-REGISTRO.
             ACCEPT CHAVE.
           READ CLIENTES
             INVALID KEY
               MOVE 'NAO ENCONTRADO ' TO WRK-MSGERRO
             NOT INVALID
               MOVE '-- ENCONTRADO --' TO WRK-MSGERRO
               DISPLAY SS-DADOS
           END-READ.
           ACCEPT MOSTRA-ERRO.

       7000-ALTERAR.
           MOVE 'MODULO - ALTERACAO -' TO WRK-MODULO.
           DISPLAY TELA.
             DISPLAY TELA-REGISTRO.
             ACCEPT CHAVE.
             READ CLIENTES
             IF CLIENTES-STATUS = 0
                 MOVE 'PRONTO PARA ALTERACAO' TO WRK-MSGERRO
                 DISPLAY MOSTRA-ERRO
                 ACCEPT SS-DADOS 
                 REWRITE CLIENTES-REG 
                   IF CLIENTES-STATUS = 0 THEN 
                       MOVE 'REGISTRO ALTERADO' TO WRK-MSGERRO 
                     ELSE 
                         MOVE 'REGISTRO NAO ALTERADO' TO WRK-MSGERRO 
                   END-IF
               ELSE 
                   MOVE 'REGISTRO NAO ENCONTRADO' TO WRK-MSGERRO 
             END-IF.
             ACCEPT MOSTRA-ERRO.

       8000-EXCLUIR.
           MOVE 'MODULO - EXCLUSAO -' TO WRK-MODULO.
           DISPLAY TELA.
             DISPLAY TELA-REGISTRO.
             ACCEPT  CHAVE.
               READ CLIENTES
                 INVALID KEY
                   MOVE 'NAO ENCONTRADO' TO WRK-MSGERRO
                 NOT INVALID KEY
                   DISPLAY SS-DADOS
                   MOVE 'ENCONTRADO - CONFIRMA ? (S/N)'
                          TO WRK-MSGERRO
               END-READ.
             ACCEPT MOSTRA-ERRO.
             IF CLIENTES-STATUS = 0 AND
                (WRK-TECLA = 'S' OR WRK-TECLA = 's') THEN
                 DELETE CLIENTES
                   INVALID KEY
                     MOVE 'REGISTRO NAO ENCONTRADO' TO WRK-MSGERRO
                     ACCEPT MOSTRA-ERRO
                 END-DELETE
             END-IF.

       9000-RELATORIO.
           ACCEPT MENU-RELATORIO.
           EVALUATE WRK-OPCAO-RELATORIO
             WHEN 1
               PERFORM 9100-RELATORIO-TELA
             WHEN 2
               PERFORM 9200-RELATORIO-DISCO
             WHEN OTHER
               DISPLAY 'ENTRE COM OPCAO CORRETA'
           END-EVALUATE.

       9100-RELATORIO-TELA.
           MOVE 'MODULO - RELATORIO -' TO WRK-MODULO.
           DISPLAY TELA.
           ACCEPT WRK-TECLA AT 1310.

       9200-RELATORIO-DISCO.
           CONTINUE.

Enviei o código em duas mensagens porque não coube em uma só e estou acessando de um lugar onde não consigo usar o gist. Por favor, desconsidere a parte dos relatórios pois ainda não implementei.

Filipe,

Rodei seu codigo e tudo certo .

Coloquei uma imagem na web:

http://escoladeprogramadores.com.br/cobol/codigofilipe.JPG

Sugestão: Coloquei uma versao do OpenIDE Portable. Basta baixar e executar. Não precisa instalar.

http://escoladeprogramadores.com.br/cobol/Portable_OpenCobolIDE.exe

Tente rodar seu codigo nessa versão e me fale.

Ivan

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software