Clipper On Line • Ver Tópico - Set device to printer

Set device to printer

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

Moderador: Moderadores

 

Set device to printer

Mensagempor asimoes » 02 Dez 2015 06:50

Mas, só para registro, qual era o problema mesmo? pode servir de referência para outros programadores.
â–º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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Set device to printer

Mensagempor ANDRIL » 02 Dez 2015 07:12

Basta ter a impressora instalada no Windows. Voce ativa o COMPATILHAMENTO dela, dando um nome a ela para ser reconhecida na rede. Recomendo um nome com até 8 caracteres. Depois basta usar essa dica que lhe passei.

microvolution escreveu:funciona mesmo sem ter fisicamente impressora matricial (lx 300/810) instalada

Vamos supor que sua LX300 seja USB. Como mandar impressão para ela? Com a dica acima, vai conseguir. Essa dica serve para qualquer tipo de conexão de impressora, USB, SERIAL, REDE e até PDFCreator.

Se voce for optar em usar as funções de impressões do harbour, obrigatoriamente, sua impressora tem que estar instalada no Windows também.
Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1271
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Set device to printer

Mensagempor JoséQuintas » 02 Dez 2015 08:30

Comentário:

c:\mvinfo\hb32\exemplos\setdevice

nomes de pastas com mais de 8 letras, não sei como isso é interpretado usando SET DEVICE TO &CLI.

Talvez mais fácil não inventar, como percebeu o BAT funcionou.

Não precisa indicar a pasta, quando se trata da pasta atual, assim nem importa que letras tem para o aplicativo.

SET PRINTER TO ("CLI.PRN")


Ou se preferir uma pasta temp:

Supondo que o aplicativo trabalhe em:
D:\SICCA
Crie
D:\SICCA\TEMP

No programa, não se preocupe com a pasta atual, apenas use a pasta RELATIVA à posição atual.

SET PRINTER TO ( "TEMP\" + CLI + ".PRN" )


Ao indicar temp\001.prn, vai ser a pasta temp dentro da pasta atual.

Mais fácil simplificar, assim fica sempre mais fácil resolver.

Última observação:
Para o programa executando numa janela console, está visível a pasta atual, será a pasta aonde a janela console foi aberta.
Para um programa rodando com HMG ou outra LIB gráfica, ou por atalho, vai ter que dar atenção às propriedades do atalho, pra garantir que a pasta considerada como atual seja a pasta correta.

O negócio é simplificar.
Pra que configurar pasta de trabalho, se pode fazer isso no atalho, ou no BAT, ou de outra forma.
Deixando pasta atual, vai funcionar em qualquer lugar, até mesmo direto no pen drive.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18153
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Set device to printer

Mensagempor JoséQuintas » 02 Dez 2015 08:35

Comentário:
Uma das opções que tenho é criar pastas separadas para cada empresa.

O aplicativo só trabalha com a pasta atual.
Então... ao selecionar uma empresa, o aplicativo simplesmente troca de pasta e recarrega.
O aplicativo continua sempre trabalhando com a pasta atual, que depois disso passou a ser a pasta da empresa.
O fonte fica simples e prático.

Dica:
Aqui criei uma função pra arquivo temporário MyTempFile()

cTmpFile := MyTempFile( "PRN" )
SET PRINTER TO ( cTmpFIle )
...

fErase( cTmpFile )


Se trabalhar isolado, em rede, em multithread, seja lá como for, é só fazer os ajustes em MyTempFile() e resolver tudo de uma vez.
E se precisar de solução quebra-galho.... só alterar MyTempFile() também.

Pelo menos vai resolver todos os problemas de uma vez, mexendo apenas numa única função.

E assim que se acostumar com funções existentes no Harbour, pode até usar a pasta temporária do próprio Windows, também alterando essa única função.

E se precisasse de ajuda pra arquivo temporário.... seria só postar essa função....
Tudo mais fácil.

REPETINDO:
Não abuse de macro. Tá usando macro até onde não precisa, e que pode esconder erros.
Além disso, o Harbour não aceita algumas macros que o Clipper aceitava, ou complica se compilar usando -w3 -es2
Até em Clipper aceita isto

SET PRINTER TO ( cPath + cFileName + ".prn" )
USE ( cPath + cFileName )
SET INDEX TO ( cPath + cFileName )
x = &( variável1  + variável 2 + variável3 )


Não é o Harbour ou o Windows que são diferentes....
É o Clipper que aceitava coisas que não deveriam ser aceitas, e muita gente continua abusando disso, sem perceber que só serve pra atrair problemas.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18153
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Set device to printer

Mensagempor microvolution » 03 Dez 2015 15:24

Então prezados "asimoes", "jquintas", "andril", "toledo", "pc", "eolo", "itamar" e demais que se interessarem...
O negócio agora já tá no fim de se resolver.
Para usar o IMPRIMERAW que é uma função que usa a Win_PrintFileRaw(), eu preciso da macro substituição, conforme abaixo:
cARQUIVO := "&CLI..PRN"
ImprimeRaw(cARQUIVO)


Ou seja, a variável CLI.PRN não me serve, e, sim o conteúdo dela, pois eu poderia muito bem utilizá-la sem problema algum, mas, como o ambiente é em rede, cada usuário do sistema (são 6 computadores usando ao mesmo tempo)... então se usar a variáel CLI.PRN e não o conteúdo dela, o sistema somará tudo e ficarão todos os recibos de clientes diferentes num mesmo lugar.

Então, como farei para usar a substituição, pois pelo que vi o WIN_PRINTFILERAW() não aceita macro substituição.

Essa, tá difícil né?
Ao final, se conseguirem, postarei as alterações que fiz no código (incluindo com imagens gráficas) para que todos usufruam e desfrutem de tudo...
:-o
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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Set device to printer

Mensagempor asimoes » 03 Dez 2015 16:40

Na verdade você vai precisar gerar um arquivo com SET PRINTER TO X

e no final da impressão passar o nome do arquivo com o seu caminho para a função ImprimeRaw, só isso.
â–º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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Set device to printer

Mensagempor Toledo » 03 Dez 2015 17:33

microvolution escreveu:Essa, tá difícil né?

O problema todo está na forma que você está tentando usar a macro, então o melhor a fazer, neste caso, é evitar usar macro

cArq:=CLI+".TXT"  //aqui vamos juntar (somar) o conteúdo de CLI + ".TXT", então se CLI é igual 0003, o resultado será 0003.txt
SET PRINTER TO (cArq)
SET DEVICE TO PRINT
...
...
SET PRINTER TO
SET DEVICE TO SCREEN
cDefaultPrinter:= WIN_PRINTERGETDEFAULT()
WIN_PRINTFILERAW(cDefaultPrinter, cArq)


Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Set device to printer

Mensagempor microvolution » 03 Dez 2015 18:14

pessoal, vlw...
mas agora, está imprimindo, mas, na hora do HB_RUN ('del &CLI..PRN') ou mesmo no teste HB_RUN ('DEL 0001.PRN') a deleção não está acontecendo.

Pois após imprimir, e, por causa da cláusula ADDITTIVE o arquivo precisa ser excluído.
Estou tentando até mesmo usar o FERASE, conforme, abaixo:
 ?'antes do del cli'
     wait
     ? '&CLI..prn' *** 0001.PRN
     ? &CLI *** 1
     ? 'cli.prn' *** cli.prn
     ? CLI *** 0001
     wait
     // hb_run ('del &CLI..PRN') // NÃO EXCLUI
     ferase("&CLI..PRN") // não exclui
     ferase("0001.PRN") ************* SÓ EXCLUI DESTA FORMA, e, está fica muito limita, preciso da macro substituição.
     ?'após del CLI'
     wait


Inclusive, os wait e os ? são minha forma de debugar o código, e o resultado deles, indica que está tudo certo, pois o resultado no RUN-TIME é o que está apresentado em cada linha mesmo após o ***.

Fico no aguardo de mais ideias...
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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Set device to printer

Mensagempor asimoes » 03 Dez 2015 18:58

Por que executar um programa externo se você pode usar funções da linguagem:

Confirme por favor cli é a variável que contém 0001..000X e o arquivo gerado é 0001.prn então:

ex.:

cArq:= Cli + ".prn"

SET PRINTER TO &cArq.

fErase(cArq)
â–º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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Set device to printer

Mensagempor microvolution » 03 Dez 2015 19:56

bom, está tudo funcionando direitinho (quase, faltam alguns detalhes), mas, gostaria de compartilhar (mesmo que antes do tempo certo) com todos as telas que já estão sendo geradas MIXADAS (digo, CONSOLE e GUI juntas).
A primeira tela abaixo, refere-se ao momento de dar baixa numa prestação que já foi baixada. O sistema pergunta em modo GUI, vejam:
15-1203 - imagem1.jpg

A segunda tela - considerando que pressionou sim, aparece a outra pra perguntar se confirma o recebimento. vejam:
15-1203 - imagem2.jpg

Agora, as 2 últimas telas são as mais importantes (acho), pois são relacionadas com o tema deste TÓPICO, pois a próxima tela pergunta (em modo GUI) se existe uma impressora LPT1/matricial instalada. Pois pode acontecer dela "fisicamente" existir, mas, estar desligada, travada, sem o cabo, etc. Então, se o usuário responder com SIM não sairá da pergunta até que realmente tenha uma impressora LPTx ligada. Se ela for ligada, a impressão sai normalmente através do TYPE &CLI..PRN. Vejam esta tal tela:
15-1203 - imagem3.jpg

Finalmente, se não estiver pronta, antes de cancelar a impressão ou excluir o arquivo &CLI..PRN através do FERASE (que deu certo), o sistema oferece uma última pergunta, vejam:
15-1203 - imagem4.jpg


Se a resposta for NÃO, a impressão realmente não sai em local nenhum e o arquivo &CLI..PRN é excluído definitivamente da pasta do sistema.
Mas, se a resposta for SIM (é que todos nós procuramos em clipper - impressão USB), sem grandes testes mais rigorosos, a impressão é direcionada para uma impressora USB, através do WIN_PRINTFILERAW().
No meu caso é uma HP C4280.

Bom, quis compartilhar ainda, mesmo sem estar tudo pronto, pois os companheiros são sempre atenciosos conosco e não podia deixar de lhes mostrar os resultados, mesmo que - como já disse, ainda não estão do jeito que eu preciso, e, acho que todos precisam.

Se alguém se interessar na maneira como estou desenvolvendo - apesar que V.Sas. sabem muito mais que eu, é só falar que explico o pouquinho que estou aprendendo convosco.
Até breve, pois Jesus em breve voltará!
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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Set device to printer

Mensagempor asimoes » 03 Dez 2015 21:35

WIN_PRINTFILERAW() serve tanto para impressora hp como para epson matricial
â–º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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Set device to printer

Mensagempor microvolution » 05 Dez 2015 20:48

bom, já que estou só avançando... graças a Deus e a todos deste fórum...
no caso pra mudar toda a configuração de impressão e usar win32prn, vi que tem que refazer todos os comandos. Correto?

Em caso de sim, já vou tentar mudar alguma coisa, começando com um extrato que tem poucas linhas, mas a dúvida são 2:

1ª - qual a diferença mesmo do arquivo .PRN e .TXT?
2ª - no caso de um arquivo .PRN ou .TXT que foi gerado pelo SET PRINTER TO (todas aqui já sabem qual é esse arquivo a que me refiro) para impressão tanto para HB_RUN ("TYPE...") e WIN_PRINTFILERAW(), esta dúvida aqui é: COMO FAÇO para usar este arquivo e criar "braço a braço" as linhas novamente de impressão para WIN32PRN?

Ou terei, que redesenhá-lo linha por linha dos @prow, traduzindo para WIN32PRN?

vlw
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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Set device to printer

Mensagempor Jairo Maia » 06 Dez 2015 10:28

Olá microvolution,

microvolution escreveu:1ª - qual a diferença mesmo do arquivo .PRN e .TXT?
A extensão .PRN (abreviação de PRINTER) é um padrão usado pela opção Imprimir para arquivo. Sua codificação pode variar dependendo do programa que o gerar. Pode ser relatórios, fotos, e outros tipos de arquivos, assim, ao abri-lo em um editor ele pode se apresentar esdrúxulo, pois depende da forma que ele foi gerado.

A extensão .TXT é um padrão para arquivo de texto, e normalmente usa-se essa extensão para deixar claro que ele é um arquivo que pode ser aberto por um editor com codificação OEM (DOS).

microvolution escreveu:2ª - no caso de um arquivo .PRN ou .TXT que foi gerado pelo SET PRINTER TO [...] para impressão tanto para HB_RUN ("TYPE...") e WIN_PRINTFILERAW(), esta dúvida aqui é: COMO FAÇO para usar este arquivo e criar "braço a braço" as linhas novamente de impressão para WIN32PRN?
Um arquivo .TXT que contém comandos para impressoras compatíveis com o modo RAW (comandos ESC/POS), esses comandos não serão entendidos pela função Win32Prn(). A função Win32Prn() imprime diretamente no Spooler do Windows, e envia a impressora após o comando :EndDoc().

microvolution escreveu:Ou terei, que redesenhá-lo linha por linha dos @prow, traduzindo para WIN32PRN?
Sim. Embora há no fórum exemplos de como você pode carregar em memória um arquivo .TXT com comandos ESC/POS, remover esses comandos e imprimir com Win32Prn(), reescrever suas funções é o caminho inclusive porque você já está com a mão na massa da migração, então na minha opinião esse é o melhor caminho.

Procure no buscador do fórum por Wn32Prn e também por Win_Prn. Win32Prn() é função do xHarbour. No Harbour chama-se Win_Prn(). A diferença está apenas no nome, os comandos usados são os mesmos. Você encontrará muita coisa, inclusive vários exemplos com essas funções. Penso que melhor seria você estudar alguns exemplos, e ir postando as dúvidas.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Set device to printer

Mensagempor microvolution » 06 Dez 2015 13:36

opa...
achei este tópico, inclusive iniciado por V.Sa. http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=12841

É este mesmo?
estou testando sua rotina e vamos ver no que vai dar.
Se for o tópico correto, responderei por lá mesmo. ok?

Abraços!
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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

Set device to printer

Mensagempor Linguagemclipper » 28 Mai 2018 00:07

Já tentaram usar o SIBRA?
https://www.linguagemclipper.com.br/impressoras/sibra-impressora-usb-clipper-excel
Olha os tipos de relatórios que dá pra criar:
Imagem
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar de usuário

Linguagemclipper
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 214
Data de registro: 16 Abr 2016 17:33
Cidade/Estado: Maceió/AL
Curtiu: 38 vezes
Mens.Curtidas: 12 vezes

Anterior



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro