Set device to printer

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Set device to printer

Mensagem por microvolution »

Prezado Itamar e demais companheiros...
volto aqui novamente para pedir socorro, pois, como já disse, no meu único cliente que me paga mensalmente, instalamos recentemente na sua rede WIN SERVER 2003 uma estação com WIN 7 e aí as impressões (mesmo em LPT1) alguma coisa dá problema.

Numa rotina que tenho para imprimir recibo que modifiquei para que a impressão vá toda para o arquivo e depois ela é impressa por um simples comando "RUN TYPE arquivo.PRN > PRN" tá me causando uma enorme dor de cabeça, pois não está sendo criado o arquivo.PRN no win 7 no momento do SET DEVICE TO PRINTER e SET PRINTER TO arquivo.PRN.

Nas máquinas com win xp tá tudo certo.

Então, fuçando aqui novamente, estou tentando compilar os exemplos da pasta contrib\hbwin\tests.
Lembrando que não sei e não tenho mais cabeça para entender como compilar no "secão" diretamente pelo HARBOUR (3.2 bruto), eu uso é IDE HMG 3.0.35 ou 3.0.46, mas, uso mais mesmo é a .35.

Então o PRN1.PRG já compilei e testei, agora estou no PRN2.PRG, e na HMG 3.0.35 o #REQUIRE "HBWIN" não funciona e aí modifiquei-o para #INCLUDE 'HBWIN.CH', e em configuração coloquei "addtional libs" HBWIN.

O erro é este:

Código: Selecionar todos

hbmk2: Processando script local: hbmk.hbm
hbmk2: Processando arquivo de configura‡Æo:
       C:\MVinfo\hmg.3.0.46\hmg.3.0.35\harbour\bin\hbmk.cfg
hbmk2: Processando: prn1.hbc
hbmk2: Processando: prn2.hbc
hbmk2: Processando: prn3.hbc
hbmk2: Processando: prn4.hbc
hbmk2: Erro: Abrindo: hbwin.hbc
hbmk2: Linkando... prn2.exe
.hbmk\win\mingw\prn2.o:prn2.c:(.data+0x188): undefined reference to `HB_FUN_HB_FNAMEEXTSET'
collect2: ld returned 1 exit status
hbmk2: Erro: Executando linkeditor. 1
gcc.exe .hbmk\win\mingw\prn2.o _temp.o    -mconsole -Wl,--start-group -lhbwin -lHBWIN -lhmg -lhbmysql -lmysql -lcrypt -ledit -leditex -lgraph -lini -lreport -lhbwin -lhbziparc -lhbmzip -lmsvfw32 -lvfw32 -lsddodbc -lrddsql -lsddmy -lhbodbc -lodbc32 -lhbhpdf -lhbvpdf -lhbmemio -lhbsqlit3 -lsqlite3 -lhbfimage -lhbpgsql -lpq -lhbtip -lhbct -lhbmisc -lhbnetio -lxhb -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib  -Wl,--end-group -oprn2.exe -LC:/MVinfo/hmg.3.0.46/hmg.3.0.35/harbour/lib -LC:/MVinfo/hmg.3.0.46/hmg.3.0.35//lib -LC:/MVinfo/hb32/contrib/hbwin/tests/
Bom, peço, que me ajudem a entender esse "troço" WINPRN e seus companheiros, para que eu mude aos poucos meu sistema para somente o mais moderno possível. Por enquanto quero tentar é na rotina de BAIXAR prestações, como já falei, mas, tem que funcionar tanto em WIN XP como WIN 7, 8, 10, além do sistema entender se a impressora padrão é uma LPT ou USB que ainda no XP uso o DOSPRN, mas, no win 7 ou 10 (neste computador aqui) não captura LPT mesmo.

Aguardo mais informações.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Set device to printer

Mensagem por ANDRIL »

O erro de gravação ocorre no WIN7 ou Superiores devido o controle de permissões nas pastas. Quando se direcionar um TYPE para LPTx, PRN o sistema operacional tem que criar um arquivo e nesse momento ocorre o erro de acesso negado, embora não tenha especificado aqui o erro.

Tente dar permissão TOTAL para o usuário "TODOS" na pasta do C:\WINDOWS\SYSTEM32\SPOOL\PRINTERS. Para isso ache a pasta PRINTERS, com botão direito do mouse, vá em PROPRIEDADES, aba SEGURANÇA. Clique em EDITAR, em seguida ADICIONAR. Crie o usuário "TODOS" e atribua acesso a ele, principalmente o GRAVAR.

Boa sorte!
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Set device to printer

Mensagem por microvolution »

Andril
Tente dar permissão TOTAL para o usuário "TODOS" na pasta do C:\WINDOWS\SYSTEM32\SPOOL\PRINTERS. Para isso ache a pasta PRINTERS, com botão direito do mouse, vá em PROPRIEDADES, aba SEGURANÇA. Clique em EDITAR, em seguida ADICIONAR. Crie o usuário "TODOS" e atribua acesso a ele, principalmente o GRAVAR.
Prezado professor, já incluí o que V.Sa. me pediu, mas, antes de compilar e testar, fiquei curioso com o fato do usuário TODOS.
Primeiro, quando digitei o nome na caixa e dei ok ele já me ofereceu o tal usuário, isso significa que ele já existia?
segundo, qual diferença dele (usuário Todos) para o usuário SISTEMA e o usuário USUÁRIOS? pergunto não em relação aos nomes deles nem suas atribuições, mas, na funcionalidade deles e seu comportamento dentro do Windows?

outra coisa, me parece que o SET PRINTER TO [nome do arquivo.PRN] ADDITIVE não está gravando aqui no Windows 10, pois lá no campo (cliente) grava perfeitamente, e, olha que aqui nesta máquina o usuário é o administrador que sou eu, com todos os privilégios que um administrador possui.

Me parece Andril, que tens grandes conhecimentos em impressões, bom, sei que não é o tópico, mas, é dentro do assunto de impressão, eu, preciso eliminar esses SET PRINTER TO para que o meu próprio sistema reconheça se tem impressora LPTx ou USB e imprima como se fosse uma matricial em USB ou literalmente matricial LPTx sem muita burocracia. V.Sa. consegue me ajudar, pois só consegui migrar de clipper para harbour através da HMG 3.0xx no início deste 2015; então, ainda nem aprendi a andar...

Bom, agora sim, vou aplicar os testes, por enquanto... "gracias"!

Leia a Bíblia, Amós 4:8.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Set device to printer

Mensagem por asimoes »

Faz este teste:
O windows do meu notebook é o 10 e funciona sem problemas.

Código: Selecionar todos

cArqPrint:="c:\temp\arquivo.prn"
SET CONSOLE OFF
SET DEVICE TO PRINT
SET PRINTER TO &cArqPrint.
SET PRINT ON
? Time()
SET PRINT OFF
SET PRINTER TO
SET DEVICE TO SCREEN
SET CONSOLE ON
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Set device to printer

Mensagem por microvolution »

Prezado Professor Assimões funcionou perfeitamente.

O estranho é que no meu cliente onde está com win 7 está gerando o arquivo com o código do jeito que tenho aqui no laboratório. Comecei a alterar somente para poder imprimir o arquivo que foi gerado através do SET PRINT TO ARQUIVO.PRN e em seguida excluí-lo.
Os comandos que uso são:

Código: Selecionar todos

          set device to printer
	  set printer to &CLI..PRN ADDITIVE
	  // set printer to &DIR.\TEMP\&CLI..PRN ADDITIVE // não deu certo.
após parte do código acima, que gera o arquivo CLI.PRN, ou melhor gera o arquivo com o conteúdo da variável CLI, no caso do teste é o número/código do cliente, que aqui no laboratório é o cliente 1.PRN.

Então, como disse, no windows 7 do cliente está sendo criado este arquivo perfeitamente, só que aqui no meu windows 10, por algum motivo o arquivo não está sendo gerado.

Como já disse, lá no cliente, o arquivo cria, mas, o uso do RUN TYPE 1.PRN (RUN TYPE &CLI.PRN) e em seguida o seu respectivo DEL não está funcionando.

Agora para eu testar, as funções de adaptação no meu windows 10 não está nem gerando o &CLI.PRN.
As linhas sugeridas pelo prezado TOLEDO são:

Código: Selecionar todos

hb_run ("type "+CLI+".PRN>prn")
hb_run ("del "+CLI+".PRN>prn")
nem alterando para desta forma não funcionou, pois não existe o arquivo com o conteúdo da variável &CLI.PRN:

Código: Selecionar todos

hb_run ("type "+&CLI.+".PRN>prn")
hb_run ("del "+&CLI.+".PRN>prn")
bom o que faço professor?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Set device to printer

Mensagem por asimoes »

No windows 10 você nã vai conseguir imprimir desta forma,

Veja se ajuda esta informação:

http://www.technipages.com/send-prn-file-to-printer
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Set device to printer

Mensagem por microvolution »

Prezado Assimões e demais, mas, pelo menos o arquivo deveria ser gerado e isso não está acontecendo.

Ok?
O que pode estar errado?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Set device to printer

Mensagem por asimoes »

O teste abaixo no windows 10 cria o arquivo teste na pasta c:\temp
e no final da impressão ele é deletado.
É esta operação que o seu sistema deve fazer?
Como eu disse este teste eu fiz no meu notebook com windows 10

Código: Selecionar todos

FUNCTION MAIN()
PRIVATE nPagina, i
   cArqPrint:="c:\temp\teste.prn"
   For i:=1 to 1
      SET CONSOLE OFF
      SET DEVICE TO PRINT
      SET PRINTER TO &cArqPrint.
      SET PRINT ON
      SetPrc(0,0)
      for j:=1 to 56
         @ PRow()+1,001 SAY "Passo: " +hb_nTos(i) +"  -  "+StrZero(j,4)
         If Mod(j,40) = 0
            EJECT
         Endif
      next
      EJECT
      DesligaImp()
      fErase(cArqPrint)
   Next
RETURN Nil

FUNCTION DesligaImp
   SET PRINT OFF
   SET PRINTER TO
   SET DEVICE TO SCREEN
   SET CONSOLE ON
RETURN Nil
Screen Shot 11-29-15 at 03.43 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Set device to printer

Mensagem por ANDRIL »

microvolution escreveu:qual diferença dele (usuário Todos) para o usuário SISTEMA e o usuário USUÁRIOS?
Não sei dizer, o que acho é que declarando as permissões para o usuário "Todos" libera acesso quando não esta logado com um usuário específico existente na listagem de usuário. Caso tenha seu usuário na listagem e faça logon com ele, basta atribuir os direitos ao seu usuário.

Me lembrei de um perrengue que passei aqui com SET PRINTER TO. Dei as permissões ao usuário para GRAVAÇÃO e tudo mais, mais sempre ocorria erro de acesso negado, erro de gravação etc.

Quando usava o "TYPE arquivo.txt > LPT2" no prompt funcionava. Quando usava no meu código SET PRINTER TO dava erro. Notem como estava meu código:

Código: Selecionar todos

///////////// DAVA ERRO DE GRAVAÇÃO /////////////////
porta="LPT2"
SET PRINTER TO &porta 

Código: Selecionar todos

//////////////DEU CERTO///////////////////
porta="LPT2"
SET PRINTER TO "&porta"
Não sei qual a diferença a nível do sistema, mais funcionou perfeitamente.

Outro teste que podes fazer. Instale os drives da impressora no Windows, Compartilhe a impressora.
No seu sistema coloque:

Código: Selecionar todos

porta="\\NOMEDOPC\NOMEDAIMPRESSORACOMPARTILHADA"
SET PRINTER TO "&porta"
Substitua o NOMEDOPC pelo nome da sua máquina que aparece em REDE. NOMEDAIMPRESSORACOMPARTILHADA pelo nome do compartilhamento que voce atribuiu a sua impressora.

Uso dessa forma e funciona no VISTA, WIN7 e WIN8. Assim não precisa capturar a impressora através do NET USE para uma porta e depois mandar do sistema para esta porta.

Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Set device to printer

Mensagem por JoséQuintas »

Lembro nos tempos do Clipper de duas situações:
- Dependendo do Windows/Servidor pode ser LPT1 ou LPT1:
- Dependendo da pasta compartilhada, com nome sem ser 8 caracteres, dava erro

Não custa perguntar:

A impressora é na porta paralela?
Lembre-se que pode-se usar PRN pra indicar impressora padrão. (mesmo caso PRN ou PRN:)

Arquivo temporário:
O Harbour tem função pra usar a pasta temporária do Windows, assim elimina problemas de autoridade.
Além disso, desse jeito o temporário fica local, o que elimina problemas de rede.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Set device to printer

Mensagem por asimoes »

Olá,

Microvolution, uma pergunta: qual é a pasta que você está direcionando a impressão? é na própria pasta onde roda o seu sistema? você pode também criar uma pasta padrão para depósito de arquivos de impressão, na prefeitura onde eu trabalho as imagens do windows 7 tem duas partições c: e d: a unidade c: nenhum usuário tem direito de gravaçao, exclusão, etc. No drive d: que é do usuário eu fiz uma função corporativa que testa se existe a pasta d:\tempimp se não existe (usuário pode apagar por acidente) a pasta é criada pela função que cria arquivos temporários para impressão. Se as estações de usuário do seu cliente só tem uma particição, cria uma pasta para essa finalidade, com tdos os direitos de gravação e direciona a impressão para esta pasta. É somente uma idéia.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Set device to printer

Mensagem por JoséQuintas »

Sempre tem as soluções práticas também.

Pelo prompt diz que funciona, então, enquanto não encontrar outra solução:

Código: Selecionar todos

Memowrit( "arquivo.bat", ;
   "copy arquivo.txt > prn" + HB_EOL() + ;
   "exit" + HB_EOL() )
run ( "arquivo.bat" )
fErase( "arquivo.bat" )
fErase( "arquivo.txt" )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Set device to printer

Mensagem por microvolution »

Microvolution, uma pergunta: qual é a pasta que você está direcionando a impressão? é na própria pasta onde roda o seu sistema?
Prezado asimoes a resposta é sim.
Bom, vale lembrar que não estou compreendendo o porquê das seguintes situações:

1 - o cliente possui win server 2k3 com estações win 98(*), xp 32 bits e agora instalamos win 7 32 bits.
2 - todas as máquinas win 98 e xp funcionam perfeitamente a questão de criar o arquivo com SET PRINTER TO xxxx.PRN (xxxx é o código do cliente pra não haver confusão com outro cliente, se algum usuário abrir ao mesmo tempo);
3 - há uma única máquina com win 98, pois até o início deste ano (que já está acabando) tínhamos apenas código 100% clipper;
4 - (*) estamos eliminando esta máquin (win 98) e substituindo por uma com win 7 (nova que comprou);
5 - lá no cliente, a máquina com win 7, está criando perfeitamente o arquivo temporário, mas, a impressão não ocorre, mesmo possuindo porta paralela e impressora matricial lx 300 - aliás todas as máquinas possuem suas próprias impressoras lpt1 matriciais e são todas lx 300;
6 - quando fui trazer aqui pro meu laboratório de testes, eu, também tinha uma máquina com win 7 (64 bits), e, em julho deste ano, participei daquele teste gratuito (beta) da microsoft onde instalei gratuita e legalmente uma versão do win 10 (64 bits);
7 - nesta minha máquina é que começou outro problema, do qual não consigo solucionar o que realmente precisa: fazer com que os arquivos criados (conforme item 5 acima) no cliente imprima;
8 - o problema que gerou aqui em minha máquina (não estando em rede alguma) é que o arquivo xxxx.PRN não está sendo criado.

Bom, não sei se expliquei ou se compliquei; apesar de todos os testes que todos aqui me indicaram e terem funcionado, no meu aplicativo que já estava pronto, infelizmente não está imprimindo, ou melhor gerando o arquivo para uma posterior impressão.

Aguardo mais informações...
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Set device to printer

Mensagem por asimoes »

Tem como você trocar a extensão .prn para .txt e ver o que acontece?

Outra coisa tem como você mostrar a parte do código onde gera o arquivo e imprime.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Set device to printer

Mensagem por Itamar M. Lins Jr. »

Ola!
Não sei se já verificou, mas... o seu antivírus ? Tente com ele desligado.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder