Página 2 de 2
Enviado: 02 Ago 2007 21:36
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
Enviado: 02 Ago 2007 21:59
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?
Enviado: 02 Ago 2007 22:07
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.
Enviado: 02 Ago 2007 22:27
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.
Enviado: 02 Ago 2007 22:50
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.
Enviado: 02 Ago 2007 23:14
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
Enviado: 03 Ago 2007 08:20
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.
Enviado: 03 Ago 2007 08:25
por Maligno
Uma curiosidade e apenas isso: tentou o suporte técnico com o autor?
Enviado: 03 Ago 2007 08:42
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.
Enviado: 03 Ago 2007 08:46
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.
Enviado: 03 Ago 2007 08:59
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.