Compartilhando Soluções Paliativas-Impressão de Formulários

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Spitzer
Usuário Nível 2
Usuário Nível 2
Mensagens: 60
Registrado em: 15 Ago 2003 04:56
Localização: Nova Fátima - PR

Compartilhando Soluções Paliativas-Impressão de Formulários

Mensagem por Spitzer »

Oi, pessoal!

Sei que aqui há muitos mestres, pelos quais não escondo tremenda admiração, mas que também há pessoas que sofrem como eu em algumas soluções... hehehehehe

Pois bem, devido a necessidade de um cliente de utilizar um específico formulário Windows ("formulário" não no sentido de forms, mas sim de documento) totalmente gráfico, inclusive com logotipo, encontrei uma solução que não é nenhuma maravilha, mas que está sendo um bom paliativo na impressão deste formulário e desejo compartilhar.
Para tal, será necessário a "interação" entre o Clipper (uso a versão 5.2e com Blinker 5.1), a biblioteca de terceiros "ClipWKS" e o Excel!
Estou falando de um formulário (nota fiscal, recibo, fatura...) e não de um relatório!

O texto ficará extenso... Mas quem tiver problemas semelhantes ao meu, creio que ajudará, e quem já tiver uma solução, por favor, leia também, pois estou aberto a novas sugestões, e sei que a solução que criei, resolve, mas que certamente há outras melhores, mais fáceis e mais práticas. Inclusive, aceito de bom grado sugestões de melhorar esta solução que estou postando.

No Excel...Numa planilha que gravei como "PLAN.XLS", criei o formulário (trabalhoso, e muito, mas não é difícil).
Desenhei nas células, e não com os recursos de caixa de texto, mas que também é possível, e acho que até mais fácil do que criar formulários diretamente nas células.
O logotipo foi baba, né? Ctrl+C no arquivo .jpg do logotipo, Ctrl+V no Excel, podendo arrastá-lo para onde quiser!
Nas células da planilha que irão os dados, coloquei as fórmulas com vínculos de outra planilha (a PLAN_TMP.XLS) que será criada pelo Clipper.
Depois digo porque da criação desta segunda planilha.
As fórmulas são mais ou menos assim (a condição "SE" é para não ficar com "0" (zero) quando não tiver conteúdo na célula):

Código: Selecionar todos

*******************
=SE('C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$1="";"";'C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$1)
=SE('C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$2="";"";'C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$2)
=SE('C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$3="";"";'C:\Desenv\Cli1\[PLAN_TMP.xls]PLAN_TMP'!$A$3)
*******************
Criei uma macro com o nome de auto_open(). Este nome é obrigatório para que a macro seja executada assim que a planilha for aberta sem a intervenção do usuário.
A macro executa uma impressão e fecha a planilha sem salvar e sem a intervenção do usuário.
A macro (não preciso gravar os dados da planilha, que só é utilizada para impressão, pois os dados são gerados pelo Clipper!):

Código: Selecionar todos

*******************
Sub auto_open()
' Região de Impressão
    Range("A1:AC56").Select
' Imprime a planilha ativa
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

'Quit Microsoft Excel.
    Application.Quit

    ThisWorkbook.Close SaveChanges:=False
End Sub

*******************
Aí, pelo menu do Excel:
1) "Editar", "Vínculos", botão "Prompt de inicialização...", escolhi a última opção, que é "Não exibir o alerta e atualizar vínculos";
2) "Ferramentas", "Opções...", guia "Editar", demarquei a caixa "Confirmar atualização de vínculos automáticos";
3) "Ferramentas", "Macro", "Segurança", escolhi a última opção, que é "Baixo (não recomendável). Você não está protegido contra macros...".
Os itens 1 e 2, evitam que apareça aquela caixa de alerta perguntando se quer atualizar os vínculos e atualizam-nos automaticamente sem perguntar, e o item 3, é para permitir a execução da macro.

Quando preciso fazer alguma atualização na planilha, é bem arcaico a forma que achei (quando abro-a, ela executa automaticamente e fecha, lembram?); Abro o Excel e no menu "Ferramentas", "Macro", "Segurança", defino "Muito alto. Somente macros...". Aí, abro a planilha, que não se autoexecutará mais, faço as alterações necessárias e volto a definir o modo de segurança de macros como baixo, e salvo-a.
Aceito sugestões... Não sei desativar uma macro!

A parte do Excel, se não esqueci nada, acabou!


No clipper...Aqui é mais baba... Afinal, mesmo com inexperiência, é nosso mundo, né?
Deve ser linkado com o sistema, a biblioteca "clpwks52.lib" (vi que tem também a biblioteca "clpwks53.lib").
Esta biblioteca permite criar e manipular planilhas do Excel até a versão 4.0, é, agora, free e está disponibilizada pelo seu autor no link abaixo:

http://www.jbooth-consulting.com/products_clipwks.asp

Ah, a biblioteca tem um excelente NG!
Aí, no programa, coloquei estes códigos:

Código: Selecionar todos

******************************** BOF File
.
.
.
// Cria Arquivo do Excel na versao 4.0

LOCAL laXls := LCREATE("PLAN_TMP.XLS","E4")

// Caminho e arquivo Excel de impressão que será executado

// Na execução, será aberto o arquivo Plan.xls, e não Plan_Tmp.xls que foi criado
LOCAL lcExec := "C:\ARQUIV~1\MICROS~2\OFFICE11\EXCEL.EXE PLAN.XLS"

LOCAL lcDados1 := "Pode ser uma variável!"

// Se não for possível criar a planilha PLAN_TMP.XLS, mensagem de erro!
IF EMPTY(laXls)
   ?
   ? "Nao foi Possivel Criar a Planilha Excel [PLAN_TMP.XLS]"
   ?
   RETURN NIL
ENDIF

// Inclui os dados na planilha criada
// "A1", "A2", "A3"..., são as células que irão os dados
// O apóstrofe simples é para forçar um texto na fórmula. Preferi assim!
LPUT(laXls,"'Aqui pode ser um literal","A1")
LPUT(laXls,"'"+lcDados1,"A2")
LPUT(laXls,"'Pode ser uma fórmula!","A3")

// Fecha a planilha criada
LCLOSE (laXls)

// Chama o Excel e abre uma outra planilha
// Abre Plan.xls, e não Plan_Tmp.xls que foi criado
IF !SWPRUNCMD(lcExec,0)
   ?
   ? "Nao foi Possivel Abrir a Planilha Excel PLAN.XLS"
   ?
ENDIF
.
.
.
******************************** EOF File
Talvez haja algum erro aí nos códigos, troca de nomes de planilhas, sintaxe...

A parte do Clipper, também se não esqueci nada, acabou!

Agora, a resposta da pergunta que certamente farão: "Porque duas planilhas Excel?".
Bom, foi a solução que encontrei para os problemas, e talvez houvessem outras que não fosse necessário a criação de dois arquivos.
E os problemas foram:
1) Formatos... A biblioteca "ClipWKS" tem também a função de leitura e reescrita numa célula, só que aí, toda a formatação da célula (cor de texto, cor de fundo, rachurados, negrito, fontes, tamanho de fontes...) ia tudo por água abaixo!
2) Esta lib trabalha com o Excel até a versão 4.0. Até consegui criar a macro numa planilha salva nesta versão, só que depois dela ter sido salva, ao reabrir, adeus, macro!

Pontos negativos:
1) Uma boa interatividade com o Excel no que diz respeito à criação de documentos;
2) Chato pra caramba... Após imprimir, o foco sai do programa (é que vai para o Excel para a impressão), e não sei voltá-lo ao programa! hehehehehe

Aceito sugestões pro item 2. Será que um comando na macro do Excel resolve? Tipo, recuperar o foco assim que o Excel é aberto e antes de fechar, voltar o foco?
Sei lá... Tô viajando! Não sei trabalhar com macros.

Era isto!
Abraços,
Ademir Spitzer
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: Compartilhando Soluções Paliativas-Impressão de Formulár

Mensagem por Pablo César »

Spitzer escreveu:Aceito sugestões pro item 2. Será que um comando na macro do Excel resolve? Tipo, recuperar o foco assim que o Excel é aberto e antes de fechar, voltar o foco?
Oi Spitzer ! Muito criativo a sua idéia de criar duas planilhas. Teve colega que postou como fazer a formatação de coluna em planilha geradas pelo Clipper.

Bem a questão 2 que não volta ao programa que chamou o Excel, não tem nada a ver com o Excel nem muito menos com as macros do mesmo. Se deve que o ambiente do seu aplicativo não é GUI (gráfico) e o Excel sim. Experimenta muda o modo de exibição do seu aplicativo-Clipper antes de chamar o Excel. Mude-o para modo Janelado (Alt Enter), possivelmente retorne (não fiz esse teste com seu aplicativo). Outra sugestão é chamar o Excel através de:

Código: Selecionar todos

SWPRUNCMD("START /W "+lcExec,0)
O start é do SO e deve esperar que seja executado o Exce para retornar a sua aplicação.

Se a sua aplicação roda em WIN XP, tenho para te indicar o -WINDOW2TOP da WAPI do Maligno. Que com certeza você conseguirá retornar a sua aplicação principal após chamado o Excel.

Espero ter ajuda e obrigado por ter compartilhado sua idéia conosco. Parabéns !
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Compartilhando Soluções Paliativas-Impressão de Formulár

Mensagem por Maligno »

Pablo César escreveu:Se a sua aplicação roda em WIN XP, tenho para te indicar o -WINDOW2TOP da WAPI do Maligno. Que com certeza você conseguirá retornar a sua aplicação principal após chamado o Excel.
Seria mais apropriado, se for do interesse do colega, baixar a biblioteca completa do meu site e tentar utilizar as funções após uma leitura do README. Mas não recomendo utilizar os parâmetros de linha de comando. As funções abstraem seu uso e facilitam o trabalho.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Bruno de Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 18 Out 2006 02:43

Mensagem por Bruno de Almeida »

Só para registrar...

Semana passada precisei de algo semelhante a isto para gerar e imprimir uma fatura cheia de firulas, inclusive com logotipo.
Vim aqui no fórum, li, li, li (li vários tópicos)... E encontrei este tópico.

ONTEM CONCLUÍ E HOJE JÁ ESTÁ RODANDO NA PRODUÇÃO DESDE AS 08:00, SEM QUALQUER PROBLEMA!

Agora iniciei outro projeto com urgência de cronograma e assim que concluir, voltarei para testar as dicas de após a impressão no Excel, retornar ao programa Clipper.

PARABÉNS AO AUTOR PELA INICIATIVA, ALÉM DE QUE, A POSTAGEM É UM VERDADEIRO STEP-BY-STEP!

Obrigado!

Bruno
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

COMPARTILHANDO

Mensagem por Netavin »

... caro Spitzer!!!
Parabéns pela iniciativa. Com certeza é o início de uma grande obra.

Forte abraço!

Netavin.
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Responder