asimoes escreveu:Outra coisa tem como você mostrar a parte do código onde gera o arquivo e imprime.
sim prezado parceiro... segue aí pra vc e para todos quantos se interessarem em aproveitar o código e/ou nos ajudar a desvendar esse mistério:
A IMPRESSÃO É DIVIDA EM DUAS PARTES, aí como ficava imprimindo por partes é que criei um direcionamento da impressão para o arquivo &CLI..PRN (onde CLI é uma variável que contém o código do cliente. Se o cliente for 0001, a variável será substituída por 0001.PRN).
A primeira parte do CÓDIGO É:
set device to printer
set printer to &CLI..PRN ADDITIVE // há muito tempo que funciona assim no win 98, xp
// set printer to &DIR.\TEMP\&CLI..PRN ADDITIVE // tentei criar uma pasta temporária dentro da pasta do sistema, mas não entendi corretamente o processo da "[b]&[/b]";
* set printer to rec.txt // eliminado há muito tempo
@ prow(),pcol() say chr (27) + chr (33) + '5'
@ prow()+1,1 say 'NÆo Vale Como Cupom Fiscal'
@ prow(),pcol() say chr (27) + 'W' + '0'
@ prow()+1,00 say '+-------------------------------------------------------+'
@ prow()+1,00 say '| |'
@ prow()+1,00 say '| R E C I B O |'
@ prow()+1,00 say '| ----------- |'
@ prow()+1,00 say '| |'
@ prow()+1,00 say '| Recebemos de &NOME_DO_CLIENTE |'
@ prow()+1,00 say '| a(s) seguinte(s) presta‡Æo(äes) ref.parte ou total: |'
aCDCLI := mCDCLIENTE
RESET_IMPRESSORA () // veja esta função logo abaixo
Esqueci de uma coisa:
Confirme se está criando cli.prn ou cli.prn.prn
Já vi coisa desse tipo acontecer.
Set device to printer
Enviado: 30 Nov 2015 21:38
por microvolution
opa nóis aqui traveis...
tô gostando de ver essa grande discussão, só tem nomes e renomes do clipper neste tópico.
Muito obrigado a todos!
Bom, neste exato momento, estou numa máquina minha aqui do laboratório com WIN XP 32 bits.
Compilei tudo com HMG 3.4.0 que por sua vez tem o HARBOUR 3.2.
E neste computador não estamos com nenhuma impressora LPTx instalada e sim apenas uma HP C4280 numa das portas USB.
Quando imprimo uma venda, ou um extrato do cliente a impressão vai para a LPTx e para que seja impressa na impressora USB o programa que faz isso é o DOSPRN v1.79.
Na baixa (recibo) que é o problema aqui em questão, o programa gera perfeitamente através da linha SET PRINTER TO &CLI..PRN e em seguida finaliza o(s) recibo(s) pelo SET PRINTER TO &CLI..PRN ADDITIVE.
Esse dito arquivo &CLI..PRN é substituído pelo nº do cliente que está sendo baixado, no caso dos testes estou usando o cliente 0001. Então é como se eu estivesse criando a seguinte variável SET PRINTER TO 0001.PRN.
E, volto a repetir, no win xp lá no cliente e aqui no laboratório está funcionando perfeitamente.
Ao final deste teste, a impressora aqui em USB imprime o(s) recibo(s) e depois o arquivo é excluído tudo SEM SOMBRA DE DÚVIDAS.
Bom, espero que todos tenham entendido até aqui, pois, vou desligar esta máquina e executar o aplicativo numa máquina aqui do laboratório com win 10 e volto em seguida para postar o que está acontecendo ok?
Atos 4:12; leia a Bíblia
Set device to printer
Enviado: 30 Nov 2015 22:26
por microvolution
Bom, voltei agora no Win 10.
Como eu já havia dito e enfatizo novamente, no win xp tá tudo certo, mas, aqui nesse meu Win 10, 2 problemas dos quais não poderiam acontecer pelo menos 1, acontecem, vejam a imagem e explico em seguida:
Então, senhores, além do arquivo com o código do cliente 0001.PRN (poderia ser qualquer outro 0050.PRN 0112.PRN, etc) não ser criado, no teste aqui do windows 10, também não imprime na USB através o aplicativo DOSPRN 1.79.
Bom, quanto a este PRINTFILRAW, quero entender melhor este procedimento e, também:
definitivamente alguém me ajude a eliminar o SET PRINTER do atual cenário, pois ele foi desenvolvido para LPTx e se funcionasse em USB, até que daria, mas, precisamos de uma rotina que funcione assim:
- em impressoras matriciais em qualquer porta LPTx;
- em impressoras matriciais em qualquer porta USB;
- em impressoras multifuncionais ou a laser em qualquer porta USB;
tudo isso lembrando que precisa imprimir condensado, draft, roman (como a gente está acostumado) e principalmente se o relatório for em impressoras matriciais isso é imprecindível (sei lá).
Ok?
Set device to printer
Enviado: 30 Nov 2015 22:44
por asimoes
A mensagem de erro é de que a variável cli não existe, eu partiria direto para o debug da função.
No seu hbp coloca a instrução
-b
E antes da impressão use a função altd() para invocar o debug e veja o valor da variável cli
O erro pela imagem acontece nesta rotina pci10013 -> linha 336
Observei também que tem um eval, como é executado esse eval ?
A variável cli é public/ private ?
Set device to printer
Enviado: 01 Dez 2015 08:24
por ANDRIL
set printer to &CLI..PRN ADDITIVE
Por que esta usando os .. (dois pontos dessa forma?)
Tente assim:
cPorta="\\PC\IMPRESSORA"
cComando="TYPE "+cARQ+" > "+cPorta
RUN "&cComando"
Ate+
Set device to printer
Enviado: 01 Dez 2015 12:46
por microvolution
bom dia a todos!
como disse o professor "asimoes" e por desencargo de consciência (apesar que já funcionava assim) coloquei a variável como pública no início do módulo.
Mesmo assim, a variável CLI não cria o conteúdo que no caso estou usando o CLIente nº 0001, então ele (o aplicativo no windows 10) deveria criar um um arquivo de nome "0001.PRN" na pasta de trabalho do sistema que é a "d:\sicca\sci10000" o %systemroot" é na unidade "C:"
A imagem acima (aplicativo em execução no win 10), não cria o arquivo "0001.PRN" com isso gera as mensagens de erro (idênticas) pois são no momento do TYPE e do DEL.
Quanto a instrução para colocar "-b", nós colocamos, dentro do próprio arquivo de configuração (acima citado) no final de todos os arquivos, mas, lembrando que estamos usando a HMG 3.4.0 para compilar, pois de harbour não entendo "patavina de nada" e nunca em muitos anos (desde 2006) que tentamos migrar para harbour ou xharbour e nunca aprendemos nada. Mas, no início de 2015 através da MiniGUI conseguimos fazê-lo...
Bom, nos demais testes que nos mandaram fazer o incrível é que a variável cria, mas, aqui no nosso aplicativo, alguma coisa a impede de ser criada.
Enfim, estamos aqui, com um problemão, que de repente é apenas um "zinho" e não o "mão"...
fico no aguardo... :%
Set device to printer
Enviado: 01 Dez 2015 13:19
por asimoes
Olá,
Que brabo isso:
Faz o seguinte, usa a função hb_DirBase()+Cli
A função hb_DirBase() retorna o caminho onde o executável está rodando, concatena com a variável cli
Obs.: Você nos informou que o arquivo é criado na pasta do sistema, então vamos tentar com hb_DirBase()
Set device to printer
Enviado: 01 Dez 2015 13:27
por microvolution
ANDRIL escreveu:Por que esta usando os .. (dois pontos dessa forma?)
Prezado ANDRIL, é um prazer saber que V.Sa. está também empenhado em nos ajudar, aliás, acessei seu site e vi o quanto se preocupa com o design... os nossos parabéns. O nosso site, mvinfo.wmx.net.br está bem arcaico ainda.
Bom, quanto aos .. (2 pontos) é o seguinte:
Quando a gente usa a macro (&) para substituição de conteúdo, sempre devemos colocar o ponto final para dizer ao processador de comandos que ali se encerra esta macro. E, por coincidência o outro ponto que completa (.. [os 2 pontos]) é pra indicar realmente o ponto de separação do nome do ARQUIVO da sua EXTENSÃO.
Parece ser um pouco confuso, mas, é bem correto isso, e uso desde 1998 e nunca tive problemas com essas nomenclaturas, a não ser agora nesta minha máquina com windows 10, pois no meu cliente, que tinha win 9x, tem win xp funciona perfeitamente; até mesmo no cliente que tem win 7 funciona, só não imprime, mas, o arquivo é criado, ou seja, o problema lá não está na criação da variável com o conteúdo da variável CLI, e, sim na impressão que não funciona - mesmo lá existindo fisicamente instalada uma impressora matricial em LPT1.
Então, se V.Sa. e todos lerem tudo o quanto já escrevi, verão que o problema era apenas um (1) no cliente, que o type e o del não funcionam, mas, aqui, no laboratório usando um windows 10, a variável não se cria, com isso o problema dobrou de tamanho, sendo 1 pela falta de criação da variável e o outro pelo processador de comandos não encontrar a variável.
Aguardo mais informações... ah! vou tentar colocar o tal DEBUG...
até o próximo comentário!
Set device to printer
Enviado: 01 Dez 2015 14:05
por ANDRIL
microvolution escreveu:"d:\sicca\sci10000" o %systemroot" é na unidade "C:"
Lembre-se de tar direito a "TODOS" os usuários para esta pasta que está no disco D:
O Win7 e superiores tratam unidades independentes. Já ocorreu esse fato comigo e descobri que faltava liberação do usuário, no meu caso não conseguia criar um ÍNDICE. Vá em segurança nesta pasta sicca e veja como estão as permissões. Principalmente se no disco D: tenha outra partição que tenha outra versão do Windows instalada para Dual Boot.
Quanto a impressão no cliente, o que te passei provavelmente funcionará, pois as informações foi testadas por mim aqui depois de pegar uma "bucha" enorme que não deixava imprimir em porta nenhuma da minha máquina.
microvolution escreveu:Prezado ANDRIL, é um prazer saber que V.Sa. está também empenhado em nos ajudar, aliás, acessei seu site e vi o quanto se preocupa com o design... os nossos parabéns.