Página 7 de 7

Set device to printer

Enviado: 02 Dez 2015 07:50
por asimoes
Mas, só para registro, qual era o problema mesmo? pode servir de referência para outros programadores.

Set device to printer

Enviado: 02 Dez 2015 08:12
por ANDRIL
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+

Set device to printer

Enviado: 02 Dez 2015 09:30
por JoséQuintas
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.

Código: Selecionar todos

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.

Código: Selecionar todos

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.

Set device to printer

Enviado: 02 Dez 2015 09:35
por JoséQuintas
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()

Código: Selecionar todos

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

Código: Selecionar todos

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.

Set device to printer

Enviado: 03 Dez 2015 16:24
por microvolution
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:

Código: Selecionar todos

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

Set device to printer

Enviado: 03 Dez 2015 17:40
por asimoes
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.

Set device to printer

Enviado: 03 Dez 2015 18:33
por Toledo
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

Código: Selecionar todos

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,

Set device to printer

Enviado: 03 Dez 2015 19:14
por microvolution
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:

Código: Selecionar todos

 ?'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...

Set device to printer

Enviado: 03 Dez 2015 19:58
por asimoes
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)

Set device to printer

Enviado: 03 Dez 2015 20:56
por microvolution
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á!

Set device to printer

Enviado: 03 Dez 2015 22:35
por asimoes
WIN_PRINTFILERAW() serve tanto para impressora hp como para epson matricial

Set device to printer

Enviado: 05 Dez 2015 21:48
por microvolution
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

Set device to printer

Enviado: 06 Dez 2015 11:28
por Jairo Maia
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.

Set device to printer

Enviado: 06 Dez 2015 14:36
por microvolution
opa...
achei este tópico, inclusive iniciado por V.Sa. https://pctoledo.org/forum/viewto ... =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!

Set device to printer

Enviado: 28 Mai 2018 00:07
por Linguagemclipper
Já tentaram usar o SIBRA?
https://www.linguagemclipper.com.br/imp ... pper-excel
Olha os tipos de relatórios que dá pra criar:
Imagem