Copiando Aquivo de Impressao Direto para impressora na rede!

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

frank_fpc
Usuário Nível 1
Usuário Nível 1
Mensagens: 17
Registrado em: 02 Jun 2006 19:34

Copiando Aquivo de Impressao Direto para impressora na rede!

Mensagem por frank_fpc »

Oi amigos, sei que pra isso tem até um tópico fixo no forum, mas gostaria de saber se alguém de alguma forma conseguiu implementar da forma como gostaria que funcionasse.

Eu faço as impressões diretamente num arquivo, para em seguida jogá-lo para a impressora padrão (tanto local como em rede e mesmo com impressoras USB), isso acelera e muito a liberdade do programa. Isso é perfeitamente funcional no Win98, como muitos de vcs sabem. Quando vamos para o XP ainda na impressão local funciona perfeitamente, mas quando se trata de impressoras em rede, só vc redirecionando a porta de impressao.

Nesse aspecto é que eu gostaria de fazer diferente, pois queria copiar o arquivo de impressao diretamente para o caminho da impressora compartilhada, sem redirecionar as portas de impressao: a questão é que quando estamos no promp de comando funciona perfeitamente, por exemplo: COPY TEMP001.TXT \\TERMINAL\FX-1170. Realiza a impressao perfeitamente, no entanto se uso esse mesmo comando dentro do Clipper por meio do comando de execução externa (!/RUN) dá o erro "Parêmtro Inválido" e não funciona.

Gostaria de saber dos amigos se sabem me informar como corrigir ou meios para superar isso.

Obrigado a todos e até!
[/b]
Vivendo, Aprendendo e Ensinando!!!
------------------------------------------
" É melhor se arrepender de um erro tentanto acertar do que se lastimar de nunca ter tentado "
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Tente...

SWPRUNCMD("COPY TEMP001.TXT \\TERMINAL\FX-1170") ao invés de RUN COPY TEMP001.TXT \\TERMINAL\FX-1170

EM TEMPO: Outras formas tbm devem funcionar (não testei):
SWPRUNCMD("PRINT TEMP001.TXT > \\TERMINAL\FX-1170")
SWPRUNCMD("TYPE TEMP001.TXT > \\TERMINAL\FX-1170")
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
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á

Mensagem por Pablo César »

Eu sempre utilizei o comando COPY FILE(ARQ.PRN) TO (VONDE) para impressora NÃO USBs, onde ´VONDE é a varivel que pode ser passado como parâmetro ora seja da linha de comando ou gravado num DBF onde contém as impressoras e seus comandos de impressão e o campo onde contém o caminho.

Eu nunca tive esse problema, claro que sempre informei o caminho, conforme a impressora estiver instalada. Por isso para cada estação deve-se configurar as impressoras que estiverem instaladas em cada estação. Pode ser usado a biblioteca do WAPI que capturaria as impressoras instaladas e seu caminho. Mas teria também fazendo assim:

VIMP:="COPY ARQUIVO.PRN \\PC\IMPRESSSORA"
RUN (VIMP)

Mas até imagino por quê está dando esse erro... deve-se ao fato que no DOS o nome do computador e o nome da impressora deve ser até 8 caracteres (nome curtos), experimenta renomear ´para ver se for isso.

E a outra possibilidade é usar a biblioteca WAPI que iria colocar o arquivo de impressão na fila de impressão, independete se é USB, local ou de rede...
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.
frank_fpc
Usuário Nível 1
Usuário Nível 1
Mensagens: 17
Registrado em: 02 Jun 2006 19:34

Mensagem por frank_fpc »

Oi amigos, desde já agradeço a contribuição de cada para a resolução do meu problema, no entanto o que pude perceber foi o seguinte:

- Ao usar a função do blinker ( Swpruncmd() ) para executar os comandos do dos, continuou da mesma forma, ou seja, dá a msg de parâmetro inválido no comando (vá entender... rssss);

- Tentei tmb, sem sucesso, usar o comando do proprio Clipper, COPY FILE ... TO, mas tmb dá o mesmo erro;

- No entanto ao usar o comando PRINT a impressão foi realizada com sucesso, mas apresentou 2 incovenientes: 1) Mesmo direcionando as mensagens para o NUL, de forma que não aparecam, ainda surge a mensagem de que o arquivo está sendo impresso, 2) Ela só está disponível nas versões do Windows XP e família 2000/2003, mas no Windows 98 ela não é disponível, o que dificulta a padronização.

- E para que ninguém pense que realmente pode haver algo de errado no comando passado para o DOS, coloquei-o numa variável e executei a depois com a função Swpruncmd(), e o seu conteúdo era exatamente esse:
COPY /B Temp036.prn \\TERMINAL\FX-1170

- Estou olhando a biblioteca WAPI do nosso amigo Maligno, parece interessante, mas gostaria de o máximo possível usar só funções natas do Clipper mesmo e da CaTools, não gosto de aquele amontoado de bibliotecas sendo utilizadas, gosto de criar as soluções, mas se não for possível, não terei alternativas...

Mais uma vez obrigado a todos que contribuíram e irão contribuir com certeza.
Vivendo, Aprendendo e Ensinando!!!
------------------------------------------
" É melhor se arrepender de um erro tentanto acertar do que se lastimar de nunca ter tentado "
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Frank, embora esta não seja uma resposta direta à sua pergunta, aqui vai: eu tb apanhei com a impressão Clipper52e / USB (mesmo usando o PageScript), até que mudei pro XHarbour (console) e os problemas sumiram.

Eu tive que mudar quase nada nos meus fontes (as mudanças são mínimas) e, pra função WIN32PRN(), do XHarbour, não há diferença entre LPT1/USB, local/rede, Win98/XP... e vc ainda imprime a cores, escolhe retrato/paisagem etc., tudo nativo. A função manda a impressão pro spool do Win e sua aplicação fica livre. É fantástico.
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem por Daniel »

eu uso assim.
mais vi falar que nao funciona em todas as maquinas, mais aqui funciona

Set Console Off
Set Device To Printer
Set Printer On
Set Printer To \\servidor\epson\lpt1
?? "X0"
?? ""
?? "P"
?? "C!"
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Daniel, a sua solução não elimina o problema da aplicação ficar "presa" até terminar a impressão do relatório, que é algo que o Frank não deseja...

Também, vc disse "aqui funciona", mas isso quer dizer o que? Que funciona com printers paralelas e/ou USB, sob qualquer Windows?
ABeltrani
Usuário Nível 2
Usuário Nível 2
Mensagens: 54
Registrado em: 09 Nov 2007 10:05
Localização: Porto Ferreira-SP

Mensagem por ABeltrani »

Frank

Eu utilizo as funções da CATools netredir() e netcancel() que fazem a mesma coisa que o NET USE do DOS. Funciona perfeito. Já testei em Windows 98 e XP.
A netredir() faz o mesmo que o NET USE <PORTA> <\\ESTAÇAO\COMPARTILHAMENTO> e a netcancel() faz o mesmo que o NET USE <PORTA> /DELETE.
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem por Daniel »

Eolo

ele so funciona em impressora paralela compativel com dos e libera o programa sim.

em usb estou usando a lib do Maligno q seria uma otima solucao pro problema dele


Exemplo

xim:= "I" + (StrZero(Val(StrTran(Str(Seconds()), ".", "")), 7)) + ".txt"
Set Console Off
Set Device To Printer
Set Printer To &xim
Set Printer On
?? "P"
?? "2"
?? "C!"
@ .....
@.....
?? "CB"
Set Printer To
Set Device To Screen
Set Printer Off
Set Console On
cPrinter:= SetaImp()
If ! Empty(cPrinter)
PrintFile(cPrinter, xim, "Relatorio de Vendas")
EndIf
FErase(xim)


********************************
Function SetaImp()
Local aPrinter, op, x2:= 10, TelaAnt

TelaAnt:= SaveScreen()
aPrinter:= GetPrinters()
@ 9, 23 Clear To (10 + LEN(aPrinter)), 51
@ 9, 23 To (10 + LEN(aPrinter)), 51
For x:= 1 TO LEN(aPrinter)
xp:= 20 - Len(AllTrim(aPrinter[x,2]))
@ x2, 25 Prompt Str(x, 2) + "-> " + aPrinter[x, 2] + Space(xp)
x2++
Next
Menu To op
RestScreen(,,,,TelaAnt)
If LastKey() == 27
Return Nil
EndIf
If Empty(aPrinter)
@ 24, 10 Clear
@ 24, 13 Say "Nao ha Impressora instalada!"
Return Nil
Else
Return aPrinter[op, 2]
EndIf
Return Nil
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

ele so funciona em impressora paralela compativel com dos e libera o programa sim...
em usb estou usando a lib do Maligno q seria uma otima solucao pro problema dele
Daniel, cada um com seu jeito de trabalhar mas eu, ao invés de usar uma solução pra paralela matricial, outra pra paralela jato de tinta, outra pra paralela laser, outra pra USB matricial, outra pra USB inkjet etc etc... (desculpe, não resisti ao exagero!), prefiro usar só o XHarbour. Uma só solução pra qq(s) impressora(s), qualquer Windows... Cara, se vc experimentar, não larga mais.

E repíto: a alteração, nos PRGs, é coisa de menos de 1%. Muito menos.
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem por Daniel »

Eolo feliz ano novo

vc pode notar na minha assinatura q eu uso o minigui nao tenho problema de impressao. Citei uma solucao para o clipper, ja q tem varias, esta de usar a lib do Maligno e muito facil de usar.
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
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á

Mensagem por Pablo César »

frank_fpc escreveu:dá a msg de parâmetro inválido no comando (vá entender... rssss)
Não teria por quê dar erro a não ser pelo nome da impressora dada (acho que é alí o problema).
para que ninguém pense que realmente pode haver algo de errado no comando passado para o DOS... o seu conteúdo era exatamente esse:
COPY /B Temp036.prn \\TERMINAL\FX-1170
Frank, experimente renomear o nome da impressora compartilhada. Isto é, pelo que eu percebo seria conveniente TIRAR o "-" do FX-1170, deixe com o nome de compartilhamento como: FX1170 (sem espaços, sem outro caracter). Experimente e nos diga se deu certo.

A outra opção que tem é utilizar o USB.EXE do Heveraldo e acredito que não teria problema algum em rodar.
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
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Outra opção, seria vc migrar essa app para xharbour, ou se não quer sair do clipper agora, simplesmente fazer somente essa parte de impressão em xharbour, tarefa essa muito facil...que pode contar com a sessão de xharbour aqui fo forum para auxiliar.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Isso é perfeitamente funcional no Win98, como muitos de vcs sabem. Quando vamos para o XP ainda na impressão local funciona perfeitamente, mas quando se trata de impressoras em rede, só vc redirecionando a porta de impressao.
Se você já redireciona sua impressão pra arquivo, o melhor é usar um programa que envie o conteúdo desse arquivo pro spooler do Windows. Independentemente de qual for a solução utilizada pra isso, você resolve esse seu problema de forma bem fácil. Agora, estando no seu lugar, já com o arquivo pronto, eu usaria a biblioteca WAPI (é um programa externo), que é a forma mais discreta, já que este programa é embutido no Clipper e você nem o vê. E você só precisa usar uma função. Exemplo:

PrintFile("#","print.txt")

Isso envia para o spooler o conteúdo do arquivo de impressão chamado "print.txt", para que seja direcionado para a impressora configurada como a padrão no seu Windows. Opcionalmente você pode trocar a string "#" pelo nome de qualquer impressora que esteja configurada no seu Windows, sela ela local ou remota.
[]'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!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Em tempo: a biblioteca WAPI também tem uma função que lista as impressoras disponíveis no Windows.
[]'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!
Responder