Copiando Aquivo de Impressao Direto para impressora na rede!
Moderador: Moderadores
Copiando Aquivo de Impressao Direto para impressora na rede!
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]
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 "
------------------------------------------
" É melhor se arrepender de um erro tentanto acertar do que se lastimar de nunca ter tentado "
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
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")
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
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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...
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.
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.
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.
- 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 "
------------------------------------------
" É melhor se arrepender de um erro tentanto acertar do que se lastimar de nunca ter tentado "
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.
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.
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
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
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
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.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
E repíto: a alteração, nos PRGs, é coisa de menos de 1%. Muito menos.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Não teria por quê dar erro a não ser pelo nome da impressora dada (acho que é alí o problema).frank_fpc escreveu:dá a msg de parâmetro inválido no comando (vá entender... rssss)
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.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
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.
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.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
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
xHarbour.org + Hwgui + PostgreSql
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: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.
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!
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!
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!
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!



