IMPRIMIR - Parte II

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Tche, de uma olhada no final agora ....basta vc fazer a mesma coisa que vc faz no começo da impressao

Código: Selecionar todos

if (cresp1 = "V")                 // nao funciona
   set print to arqtemp.txt
elseif (cresp1 = "A")         //  ok
   set print to arqtemp.txt
elseif (cresp1 = "I")   //  ok
   set print to printer
endif

if (LastKey() == 27)
   close databases
   return
endif


impress()
goto top
mens("Aguarde IMPRIMINDO Relatorio de Clientes...")
set device to printer
setprc(0, 0)
do while (.T.)
   pag++
   @ 00,00 say chr(15)
   @ PRow() + 1,  0 say "DATA..: " + DToC(Date())
   @ PRow(),  0 say "DATA..: " + DToC(Date())
   @ PRow(), 40 say "RELATORIO DE CLIENTE POR CODIGO - De:      a     "
   @ PRow(), 40 say "RELATORIO DE CLIENTE POR CODIGO - De:      a     "
   @ PRow(), 78 say strzero(m_cod1, 4, 0)
   @ PRow(), 78 say strzero(m_cod1, 4, 0)
   @ PRow(), 85 say strzero(m_cod2, 4, 0)
   @ PRow(), 85 say strzero(m_cod2, 4, 0)
   @ PRow(), 122 say "PAG..: " + strzero(pag, 3, 0)
   @ PRow(), 122 say "PAG..: " + strzero(pag, 3, 0)
   empresa(3)
   @ PRow() + 1,  0 say Replicate("-", 133)
   @ PRow(),  0 say Replicate("-", 133)
   @ PRow() + 1,  0 say "CODIGO NOME/ENDERECO                            BAIRRO/CIDADE             CEP        /UF   FONE/FAX          CGC/Ins.Estadual"
   @ PRow()    ,  0 say "CODIGO NOME/ENDERECO                            BAIRRO/CIDADE             CEP        /UF   FONE/FAX          CGC/Ins.Estadual"
   @ PRow() + 1,  0 say Replicate("-", 133)
   @ PRow(),  0 say Replicate("-", 133)
   do while (!EOF() .AND. PRow() <= 59)
      @ PRow() + 1,  1 say strzero(cod, 4, 0)
      @ PRow(),  7 say emp
      @ PRow(), 48 say bai
      @ PRow(), 74 say cep
      @ PRow(), 91 say fon
      @ PRow(), 108 say cgc
      @ PRow() + 1, 7 say end
      @ PRow(), 48 say cid
      @ PRow(), 85 say est
      @ PRow(), 91 say fax
      @ PRow(), 108 say ins
      @ PRow() + 1,  0 say Replicate("-", 133)
      skip
   enddo
   eject
   @  0,  0 say " "
   if (EOF())
      set device to screen
      close databases
      return
   endif
  enddo
enddo
set print to printer

if (cresp1 = "V")                 // nao funciona
   edicao("arqtemp.txt")
endif

(5, 6, 20, 75, restscreen:= tecli)
return
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
ERCS123
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 28 Jul 2007 19:54
Localização: franca

Mensagem por ERCS123 »

Sygecom, fiz do jeito que voce explicou. Agora o arquito txt foi criado, mas não chamou a funcao EDICAO. O que será que esta faltando?
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Pelo que eu estou entendendo, você está fazendo confusão. Quando se direciona a impressão para um arquivo, normalmente ele é apenas para preview. Quando se quer que a impressão vá para a impressora, direciona-se diretamente para ela. Claro que há meios para sempre direcionar a impressão para arquivo e aproveitá-lo tanto para preview quanto para a impressão propriamente dita.
No seu caso, me parece que você terá de optar: ou vai pra impressora ou vai pro preview.
E se for assim, no início do seu código questione o usuário para onde ele quer o resultado da impressão: preview ou impressora. Com base na resposta direcione a impressão para o arquivo (preview) ou para impressora. Ao final da impressão, e ainda com base na resposta, se for preview, você já sabe que deve apresentar o arquivo através da função que agora você tem.
[]'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!
ERCS123
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 28 Jul 2007 19:54
Localização: franca

Mensagem por ERCS123 »

Maligno, agora eu acho que entendi. Mas vou ser honesto com voce, eu não sei por tudo isso em pratica.


AQUI, EU PERGUNTO PARA O USUARIO, QUAL O TIPO DE IMPRESSAO...

Código: Selecionar todos

mens("Escolha o Tipo Relatorio -  Video/Arquivo/Impressora") 
   @ 23, 78 get Cresp1 picture "@!" valid cresp1 $ "VAI" 
   read 

    if (cresp1 = "V")                 
      set print to arqtemp.txt 
       edicao("arqtemp.txt") 
    elseif (cresp1 = "A")         
        set print to arqtemp.txt    
     elseif (cresp1 = "I")  
      set print to printer 
      endif 
    

AI EM SEGUIDA, VEM O RESTANTE DO RELATORIO

Código: Selecionar todos

  impress() 
  goto top 
  mens("Aguarde IMPRIMINDO Relatorio de Clientes...") 
  set device to printer 
  setprc(0, 0) 
  do while (.T.) 
  pag++ 
  @ 00,00 say chr(15) 
  @ PRow() + 1,  0 say "DATA..: " + DToC(Date()) 
  @ PRow(),  0 say "DATA..: " + DToC(Date()) 
  @ PRow(), 40 say "RELATORIO DE CLIENTE POR CODIGO - De:      a     " 
  @ PRow(), 40 say "RELATORIO DE CLIENTE POR CODIGO - De:      a     " 
  @ PRow(), 78 say strzero(m_cod1, 4, 0) 
  @ PRow(), 78 say strzero(m_cod1, 4, 0) 
  @ PRow(), 85 say strzero(m_cod2, 4, 0) 
  @ PRow(), 85 say strzero(m_cod2, 4, 0) 
  @ PRow(), 122 say "PAG..: " + strzero(pag, 3, 0) 
  @ PRow(), 122 say "PAG..: " + strzero(pag, 3, 0) 
  empresa(3) 
  @ PRow() + 1,  0 say Replicate("-", 133) 
  @ PRow(),  0 say Replicate("-", 133) 
  @ PRow() + 1,  0 say "CODIGO NOME/ENDERECO                            BAIRRO/CIDADE             CEP        /UF   FONE/FAX          CGC/Ins.Estadual" 
  @ PRow()    ,  0 say "CODIGO NOME/ENDERECO                            BAIRRO/CIDADE             CEP        /UF   FONE/FAX          CGC/Ins.Estadual" 
  @ PRow() + 1,  0 say Replicate("-", 133) 
  @ PRow(),  0 say Replicate("-", 133) 
  do while (!EOF() .AND. PRow() <= 59) 
     @ PRow() + 1,  1 say strzero(cod, 4, 0) 
     @ PRow(),  7 say emp 
     @ PRow(), 48 say bai 
     @ PRow(), 74 say cep 
     @ PRow(), 91 say fon 
     @ PRow(), 108 say cgc 
     @ PRow() + 1, 7 say end 
     @ PRow(), 48 say cid 
     @ PRow(), 85 say est 
     @ PRow(), 91 say fax 
     @ PRow(), 108 say ins 
     @ PRow() + 1,  0 say Replicate("-", 133) 
     skip 
   enddo 
   eject 
   @  0,  0 say " " 
   if (EOF()) 
     set device to screen 
     close databases 
 *    erase arqtemp.dbf 
      return 
   endif 
  enddo 
enddo 
(5, 6, 20, 75, restscreen:= tecli) 
return 
[code]

MAS E AGORA, NÃO SEI MAIS COMO CONTINUAR, PARA FAZER CONFORME VOCE EXPLICOU.  
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Você está errando apenas na seqüência dos eventos. Supondo que a resposta esteja em cResp1:

Código: Selecionar todos

cResp1":= Upper(cResp1)
if cResp = "V"
   SET PRINTER TO "ARQTEMP.TXT"
else
   SET PINTER TO LPT1 // ou LPT2, por exemplo
end

SET DEVICE TO PRINT
//
// seu relatório aparece nesse espaço
//
SET DEVICE TO SCREEN

if cResp = "V"
   edicao("arqtemp.txt")
   // se quiser, após a apresentação, apague o temporário
end
Repare que, como tudo em programação, você tem que prestar atenção na seqüência da ocorrência dos eventos. Repare também que, da forma como expus acima, o arquivo temporário só será utilizado para o preview. Se for pra imprimir na impressora, nenhum arquivo será necessário. Mas, como eu disse, há outras formas de se trabalhar com impressão.
[]'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!
ERCS123
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 28 Jul 2007 19:54
Localização: franca

Mensagem por ERCS123 »

Achei onde estava o erro

Código: Selecionar todos

 @  0,  0 say " " 
   if (EOF()) 
      set device to screen 
      close databases 
      return 
   endif 
  enddo                 // AQUI          
enddo                 //AQUI

if (cresp1 = "V")                 
   edicao("arqtemp.txt") 
endif 



Código: Selecionar todos

 @  0,  0 say " " 
   if (EOF()) 
      set device to screen 
      close databases 
      return 
   endif 
 
if (cresp1 = "V")                 
   edicao("arqtemp.txt") 
endif 

 enddo 
enddo 
QUERO AGRADECER NOVAMENTE, A TODOS QUE TIVERAM A PACIENCIA DE ME AJUDAR....MUITO OBRIGADO MESMO..........TCHAU
Ademir
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 31 Jul 2007 16:28
Localização: Porto Ferreira-SP

Mensagem por Ademir »

Pessoal Bom dia !

Não sei se seria este o tópico, mas utilizo o PrWin 3.9b standard nos meus sistemas e tenho tido alguns problemas. Por exemplo quando preciso negritar ou mudar o tamanho da fonte por exemplo. Se coloco o chr(15) ou chr(27)+chr(69) no FINAL da linha, desconfigura toda a impressão a partir daí. Alguem já teve este problema ?

Um grande abraço a todos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Uma curiosidade e apenas isso: tentou o suporte técnico com o autor?
[]'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!
Ademir
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 31 Jul 2007 16:28
Localização: Porto Ferreira-SP

Mensagem por Ademir »

Já tentei contactar o Vagner. Ele disse para eu rever o fonte e verificar se o comando de impressão que eu usava estava compativel com o cadastrado no COMANDOS.DBF. Verifiquei mas está tudo ok. Pra resolver o problema passei a colocar o chr() no inicio da proxima linha. Aí não deu mais problema. Mesmo assim achei interessante perguntar se alguem havia tido o mesmo problema.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

[Bom dia a todos ! Eu não conseguí praticamente acessar o dia todo de ontem aqui o forum (mas pelo que percebo dos horários, não deve ter sido somente comigo).
ERCS123 escreveu:Achei onde estava o erro

Código: Selecionar todos

 @  0,  0 say " " 
   if (EOF()) 
      set device to screen 
      close databases 
      return 
   endif 
  enddo                 // AQUI          
enddo                 //AQUI
Por isso, que eu acho fundamental dar importância a edentação do código fonte. Para poder visualizar melhor o que falta fechar e a sequência dos procedimentos. Eu NÃO acostumo utilizar o "END" eu utilizo "ENDIF", "ENDDO" ou "ENDCASE" senão dá confusão...

Ewerton, como eu te falei em outras mensagens passadas, você poderia SEMPRE criar o arquivo de impressão, sempre e quando você consiga remover os comandos de impressão na hora de exibir relatórios, pois fica estranho para o usuário a visualização desses caracteres no meio dos textos para visualização.

Eu digo de gerar sempre e executar a visualização ou impressão conforme o usuário tenha escolhido (atribuído em variável essa escolha). Eu acredito que seria conveniente fazer assim, porque tendo em conta que sempre o ultimo arquivo estará alí disponível, pode-se feito uma opção de "ver ultimo relatorio gerado", isto impede o re-processamento. Ainda mais faço de dentro do preview (como ja mencionou o Maligno) uma opção que possibilite a impressão de relatório desde lá. Com isto poderia se fazer um menú pro usuário escolher o que fazer com o relatório, com as seguintes opções:

1. Visualizar em tela
2. Imprimir na Epson LX-300 (eu acostumo colocar o nome default da impressora)
3. Visualizar ultimo relatório

Nesta terceira opção, é só carregar o arquivo que está gravado no HD, sem necessidade de re-processamento. O que em alguns casos pode fazer muita diferença, dependendo o tamanho ou de acordo procedimento expendioso aplicado (como por exemplo indexação de arquivos no relatorio). Especialmente se o usuário pretende analisar a visualização do mesmo relatório interruptamente. por isso coloque a data e hora dos seus relatórios para que não haja confusão de versão de relatórios.

Depois de gerado o arquivo de relatório e quiser imprimir, é só utilizar:

- COPY FILE("ARQUIVO.PRN") TO ("LPT1") // Para caso imp. paralela
- COPY FILE("ARQUIVO.PRN") TO ("\\SERVIDOR\EPSON") // Para caso imp. compartilhada
- WAPI.LIB ou WAPI.EXE, USB.EXE, USBPRINT.EXE para colocar o relatório na fila de impressão (pelo SPOOLER). E existem muitos outros que também fazem isso.

Mas tudo isto, são conceitos que cada um adota por conta. Não quer dizer que tenha que ser feito assim, é apenas uma exposição do meu parecer.
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.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Olha Ademir, esta questão de formatação de arquivo de impressão e sua impressão por consequente está tento um aplicativo muito promissor que é o USBPRINT.EXE do MarcosV que ainda está desenvolvendo e que nos prometeu retornar logo após consiga entregar seu sistema a um cliente dele. Mas o USBPRINT ja faz formatação de NEGRITO, NORMAL EXPANDIDO e CONDENSADO. É só colocar uma TAGs que permitem ao interpretador fazer a formatação de impressão. Ou até mesmo interpreta esse comando (por enquanto básicos) de comando da EPSON (CHR(15), etc..). Baixe o arquivo http://www.marsoftnet.hpg.com.br/usbprint___.zip que está no tópico https://pctoledo.org/forum/viewto ... 7348#27348, dê uma olhada no tópico para inteirar-se das sugestões feitas para possível implementação que se forem conseguidas, será de grande ajuda para a comunidade Clipper.
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.
Responder