sábado, 12 de dezembro de 2009

Acucobol - exportando dados CSV

Utilizar ferramentas de escritório (office) como editor de textos e planilhas eletrônicas é uma prática comum nas empresas, e a integração dessas ferramentas com os sistemas de gestão é um ganho de produtividade bem significativo. Neste post irei demostrar como exportar informações para um arquivo CSV (Comma-separated values), que é um padrão de arquivos onde as colunas são delimitadas por ";" (por default), podendo ser outro caracter delimitador. É importante ressaltar que não utilizaremos componente ACTIVEX neste exemplo, pois não iremos formatar o CSV na planilha, apenas efetuar uma chamada de sistema do aplicativo da planilha passando como parâmetro o arquivo CSV.

Primeiramente devemos declarar o arquivo CSV, que não deixa de ser um arquivo texto (line sequential).

SELECT SAIDA ASSIGN TO DISK W-ARQ-CSV
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS FILE-STATUS.

FD SAIDA.
01 REG-SAIDA PIC X(300).

A seguir leitura dos registros, e gravação dos mesmos no arquivo CSV.

OPEN INPUT CADASTRO | abertura do arquivo

MOVE SPACES TO REG-SAIDA
MOVE "CODIGO;NOME;ENDERECO;CEP" TO REG-SAIDA | o primeiro registro é o cabeçalho
WRITE REG-SAIDA | grava registro

INITIALIZE REG-CADASTRO | inicializa registro no inicio do arquivo
START CADASTRO KEY IS > CHAVE-CADASTRO INVALID KEY | posiciona para leitura
EXIT PARAGRAPH
END-START
PERFORM UNTIL 1 = 2 | laço infinito
READ CADASTRO NEXT RECORD AT END
EXIT PERFORM | termina laço de repetição infinito (1=2)
END-READ
STRING CAD-CODIGO DELIMITED BY SIZE
";" DELIMITED BY SIZE
CAD-NOME DELIMITED BY " " | delimitado por 2 espaços
";" DELIMITED BY SIZE
CAD-ENDERECO DELIMITED BY " "
";" DELIMITED BY SIZE
CAD-CEP DELIMITED BY SIZE
INTO REG-SAIDA
END-STRING
WRITE REG-SAIDA | grava registro
END-WRITE
END-PERFORM

CLOSE CADASTRO | fecha arquivo


E por final, podemos chamar o aplicativo da planilha diretamente (observar o PATH do sistema).
Este exemplo também é funcional utilizando acuconnect(thinclient).
STRING "excel.exe /r " DELIMITED BY SIZE
W-ARQ-SAIDA DELIMITED BY SIZE
INTO W-AUX
END-STRING
CALL "C$SYSTEM" USING W-AUX, 129. | 128=CSYS-DESKTOP + 1=CSYS-ASYNC (chama excel e segue programa)
Grato pela oportunidade.

terça-feira, 1 de dezembro de 2009

Acucobol + LOG

Quando nos deparamos com problemas oriundos de falhas de execução nos processos (geralmente processos batch), somente chegamos a solução executando o processo falho novamente por tantas vezes até que tenhamos um ponto de partida para começar a investigação. Nessas situações podemos utilizar um log nos processos, que irá nos situar e reduzir o desperdício de tempo para começar a investigação. A seguir irei demostrar como implementar log de processos em programas acucobol.

Abaixo foi implementado um script que executa o programa cobol, define o nome e diretório onde o log será armazenado. Para executar basta passar como parâmetro o programa acucobol, o script acrescenta informações ao log antes de instanciar o runtime. Já no runtime podemos observar o parâmetro '--time' que acrescenta ao final do log o tempo real de execução, e por fim o parâmetro +ee que identifica o arquivo de log e que ele será alimentado pelo programa a ser executado.

ACU=`echo $1`
DATA_HORA=`date +%d%m%Y_%H%M_%N`
LOG_FILE=/var/log/acucobol/log_$ACU_$DATA_HORA.txt
touch $LOG_FILE
chmod 777 $LOG_FILE
logname >> $LOG_FILE
echo $IP_CLIENTE >> $LOG_FILE
date >> $LOG_FILE
runcbl --time +ee $LOG_FILE $ACU
date >> $LOG_FILE
exit

Agora veremos quais as alterações necessárias no programa acucobol. Inicialmente deve ser declarada em SPECIAL-NAMES, SYSERR IS SYSERR.

SPECIAL-NAMES
SYSERR IS SYSERR.

Pronto, para escrever no log basta utilizar
DISPLAY "GRAVANDO NO LOG" UPON SYSERR

É muito simples e facilitará o monitoramente dos processos. Façam bom uso.

Grato pela oportunidade.

domingo, 25 de outubro de 2009

Acucobol + CGI

A utilização do navegador de internet para execução de processos (entrada de dados e exibir resultados), tornou-se comum no desenvolvimento de sistemas. Há alguns dias, tive a necessidade de exibir no browser, um relatório gerado por um programa cobol. A seguir irei demonstrar a melhor maneira que encontrei, com o mínimo de alterações no código-fonte.

Para esta prática, estaremos utilizando a tecnologia CGI que pode ser compreendida na documentação do acucobol (A programmer´s guide to the internet) e exemplos que acompanham o produto.
No formulário HTML, teremos o start do script CGI:
action="cgi-bin/programa.cgi"

No script CGI (programa.cgi) teremos:



Entendendo o script: A variável DATA_HORA obterá a data e hora com nano segundos, e ARQUIVO_RELATORIO possui o caminho e nome do arquivo que será gerado pelo cobol, criando assim a segurança de não termos usuários diferentes criando um mesmo arquivo. Exemplo: 251009Out10902888652.txt

ARQUIVO_RELATORIO é passado como parâmetro ao programa cobol, que deverá gerar o relatório no caminho especificado. Após a execução do programa cobol o arquivo é exibido com outras instruções html informadas no CGI.

E por fim veremos quais as alterações necessárias no programa cobol.
O ARQUIVO_RELATORIO que foi enviado como parâmetro ao cobol, será recebido quando informado junto a PROCEDURE DIVISION a declaração CHAINING ARQ-TXT.
Ex.
PROCEDURE DIVISION CHAINING ARQ-TXT.

ARQ-TXT é uma variável a ser definida na WORKING-STORAGE SECTION do programa.
Ex.
77 ARQ-TXT PIC X(100).

Também deve ser informado no ASSIGN do arquivo.
Ex.
SELECT SAIDA ASSIGN TO ARQ-TXT

Resta salientar que para utilizar o mesmo programa cobol rodando pelo CGI e SSH, devemos separar a entrada de dados (ACCEPT) da rotina principal que irá gerar o relatório. E os comandos DISPLAY devem estar de acordo com o tipo de chamada, pelo CGI ou SSH.

Grato pela oportunidade e até a próxima.

domingo, 4 de outubro de 2009

Acucobol básico - depurador

Neste post irei demonstrar a utilização do depurador de código. Não precisamos mais colocar um display de variáveis em determinados pontos do código como é procedimento em algum cobol mais antigo. Para que possamos depurar o código, devemos compilar o programa com o parâmetro -zd, ou seja, ccbl32 -zd -o @.acu teste1.cob. Para submeter o objeto ao runtime, utilizamos o parâmetro -d, ou seja, wrun32 -d teste1.acu.



Abaixo segue o código-fonte exemplo construído para demonstrar o depurador.



Após executar a linha de comando, uma interface com o código é exibida, e esta possui diversas funcionalidades como correr o código passo-a-passo (tecle s seguido de enter), mostrar conteúdo de variáveis , mudar o valor de variáveis, dentre outras que constam na documentação do produto.



Grato pela oportunidade.

terça-feira, 29 de setembro de 2009

Acucobol básico - compilador e runtime

A melhor forma de aprender uma tecnologia é utilizando sua documentação e modelos de exemplos que acompanham o produto. O acucobol possui uma documentação bastante rica e bem elaborada. Neste post irei apresentar basicamente o compilador e runtime do acucobol.

O código fonte acucobol é submetido ao compilador que gera um objeto que por sua vez é executado pelo runtime. No windows, o compilador do acucobol é executado pelo comando ccbl32. Para este comando existem vários parâmetros, ao adicionar -help ao comando, será exibida uma lista. Neste momento utilizarei apenas o básico, e em outro post o assunto pode ser apresentado.

Então, executando ccbl32 -o @.acu olamundo.cob, o compilador estara gerando um objeto de nome olamundo.acu para o código-fonte olamundo.cob. Para executar este objeto, utilizamos o runtime do acucobol pelo comando wrun32. O exemplo é executado da seguinte forma, wrun32 olamundo.acu.



O resultado da execução é:



O código-fonte que foi submetido ao compilador segue abaixo. A estrutura do código-fonte acucobol será assunto para um próximo post.



Também resta salientar que existe um arquivo de configurações que é utilizado pelo runtime do acucobol, este por default é localizado no diretório etc e é chamado cblconfig. Este também será assunto para os próximos posts.

Grato pela oportunidade e espero ter colaborado.

sexta-feira, 25 de setembro de 2009

Apresentação

Meu nome é Gerson Tomas Schmitt, e estou finalmente criando meu blog para que possa divulgar o conhecimento adquirido em alguns anos de vivência no ambiente de TI. Atualmente retornei as origens, fazendo parte em um projeto para migração de sistemas cobol ansi 74 para acucobol 85, desenvolvendo e convertendo programas e base cobol. Estarei postando conteúdo sobre as diferenças encontradas do cobol 74 para acucobol, e novas implementações para ambiente caracter e gráfico . Convido todos a participar.