Ir para conteúdo
Fórum Script Brasil
  • 0

Impressão De Relatório Na Lx300


Vivendo&Aprendendo

Pergunta

Olá galera!

Estou com um enorme problema e preciso da ajuda de vocês, estou terminando um sistema para agropecuárias e quando é finalizado uma venda o sistema emite uma promissória se for a prazo o problema esta aqui, pois no meu computador onde esta sendo desenvolvido o projeto funciona beleza no preview(só não tentei imprimindo, pois não tenho a impressora) mas no cliente quando ele vai imprimir a promissória sai tudo errado e o preview sai certo pra ele também.

Estou usando o Fortes Reports e o comando de preview e dentro do relatório o usuario pede para imprimir.

Como faço para mandar imprimir de outra forma.

O outro problema é quando o form da promissória é fechado exite um outro que também deve ser fechado e no meu pc ele fecha certinho mas no do cliente não fecha.

Porque será?

Alexandre

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0
mas no cliente quando ele vai imprimir a promissória sai tudo errado e o preview sai certo pra ele também.
o que seria este tudo errado? Imprime outras informações? Imprime caracteres incorretos?

O outro problema é quando o form da promissória é fechado exite um outro que também deve ser fechado e no meu pc ele fecha certinho mas no do cliente não fecha.
Em que momento é criado e como é fechado o 2º form.

Vivendo&Aprendendo, mais detalhes, mais possibilidades de alguém ajudar.

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Micheus

Seguinte...

o que seria este tudo errado? Imprime outras informações? Imprime caracteres incorretos?

Se for gerado uma promissória somente o sistema esta imprimindo várias da seguinte forma:

na primeira ele imprime o topo, na segunda o topo e mais um pedaço, e assim até terminar.

Quando é finalizada a venda abre o Form chamado Fechamento e quando clico em Finalizar abre-se o form da promissória e deve ser fechado o Fechamento, ai esta o problema porque no meu pc funciona certinho, mas no cliente não fecha o form de fechamento.

Aexandre

Link para o comentário
Compartilhar em outros sites

  • 0

Vivendo&Aprendendo, os questionamentos foram a título de obter mais informações sobre seu problema para que os colegas possam ajudar.

Sobre o Rave, eu não o utilizo então não poderei ajudar. Espero que outros possam.

Quando é finalizada a venda abre o Form chamado Fechamento e quando clico em Finalizar abre-se o form da promissória e deve ser fechado o Fechamento, ai esta o problema porque no meu pc funciona certinho, mas no cliente não fecha o form de fechamento.
Essa questão talvez dê para tentar ajudar. Essa é a sequência?:
em finaliza venda - Form???
 - chama FormFechamento: utilizando Show ou ShowModal?
    - em Finalizar - FormFechamento
       - chama FormPromissoria: utilizando Show ou ShowModal?
       - fecha FormFechamento: então foi aberto com Show?

Link para o comentário
Compartilhar em outros sites

  • 0

Colegas, não sei quanto ao Rave mas com o Quick tive vários problemas de impressão em matriciais e a melhor solução que achei foi imprimir na mão pelo OpenPrinter, StartDocPrinter, WritePrinter, EndDocPrinter e ClosePrinter; utilizando os comandos ESC/P da impressora.

As matriciais são muito frescas para imprimir, mas se você utilizar seus comandos ESC(veja no manual), elas imprimem com exatidão.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Micheus muito obrigado pela ajuda e só lembrando eu uso o Fortes Reports e não o Rave.

Essa questão talvez dê para tentar ajudar. Essa é a sequência?

em finaliza venda - Form???

- chama FormFechamento: utilizando Show ou ShowModal?

- em Finalizar - FormFechamento

- chama FormPromissoria: utilizando Show ou ShowModal?

- fecha FormFechamento: então foi aberto com Show?

O Frm Fechamento não é aberto no close do frmvenda, mas sim em uma mensagem que o usuario responde SIM ou NÃO para finalizar a venda.

FrmFechamento esta aberto em ShoeModal.

Em um botão BtnFinalizar eu chamo o FrmPromissoria e depois do comando de chamar o promissoria dou um CLOSE no FrmFechamento.

É isso aí..

KmKg tem como me mandar um modelo com estes comandos?

Alexandre

Link para o comentário
Compartilhar em outros sites

  • 0

Adicione WinSpool no uses.

OpenPrinter p/ pegar o Handle da impressora:

var HPrinter:THandle;
begin
  OpenPrinter(PChar('Nome_da_Impressora'), HPrinter, nil);
end;
StartDocPrinter p/ iniciar um job no spool de impressão:
var Doc:Doc_Info_1;
begin
  Doc.pDocName    := 'Nome do Relatório';
  Doc.pOutputFile := '';
  Doc.pDatatype   := 'RAW';
  StartDocPrinter(HPrinter, 1, @Doc);
end;
Alguns comandos ESC:
var iRet:Longword; s:String;
  s := #27#120#0; // coloca em modo Draft
  WritePrinter(HPrinter, @s[1], 3, iRet);
  s := #27#50; // define espacejamento vertical em 1/6 polegadas
  WritePrinter(HPrinter, @s[1], 2, iRet);
  s := #27#74 + Chr(10); // Avança 10 linhas
  WritePrinter(HPrinter, @s[1], 3, iRet);
  s := #27#69; // coloca fonte em estilo bold
  WritePrinter(HPrinter, @s[1], 2, iRet);
  s := #27#15#27#80; // imprime com 17 caracteres por polegada
  WritePrinter(HPrinter, @s[1], 4, iRet);
  s := 'Teste de Impressão'; // imprime uma linha
  WritePrinter(HPrinter, @s[1], Length(s), iRet);
  s := #13#10; // Carriage return e Line feed
  WritePrinter(HPrinter, @s[1], 2, iRet);
EndDocPrinter p/ finalizar o job de impressão:
begin
  EndDocPrinter(HPrinter);
end;
ClosePrinter p/ fechar o objeto HPrinter
begin
  ClosePrinter(HPrinter);
end;

Verifique outros comando ESC no manual da impressora(existem muitos outros)

Link para o comentário
Compartilhar em outros sites

  • 0
O Frm Fechamento não é aberto no close do frmvenda, mas sim em uma mensagem que o usuario responde SIM ou NÃO para finalizar a venda.

FrmFechamento esta aberto em ShoeModal.

Em um botão BtnFinalizar eu chamo o FrmPromissoria e depois do comando de chamar o promissoria dou um CLOSE no FrmFechamento.

Vejamos se entendi:
FrmVenda
|
+-> Clica BtnFinalizaVenda
    |
    +-> FrmFechamento.ShowModal
        |
        +-> Clica BtnFinalizar
            |-> FrmPromissoria.ShowModal
            +-> FrmFechamento.Close
Se for isso, então acho que você poderia utilizar esta abordagem:
FrmVenda
|
+-> Clica BtnFinalizaVenda
    |
    +-> FrmFechamento.ShowModal
    |   |
    |   +-> Clica BtnFinalizar
    |       |
    |       +-> ModalResult := mrRetry;
    +-> if ModalResult = mrRetry then
        |
        +-> FrmPromissoria.ShowModal
Em termos de programação, você não chamaria mais FrmPromissoria a partir do botão BtnFinalizar. Vejamos: - se já não tiver modificado a proprieda ModalResult do botão BtnFinalizar, uma alternativa seria atribuir mrRetry para o caso de você possuir outro botão que utilize o mrOk; - então, em FrmFechamento, ao clicar em BtnFinalizar será executada a ação que você programou no evento OnClick do botão e, sem utilizar o comando Close, a atribuição de mrRetry irá automaticamente fechar o form; - sendo testado o retorno de ShowModal na chamada FrmFechamento.ShowModal:
//no OnClick de BtnFinalizaVenda
  ...
  if FrmFechamento.ShowModal = mrRetry then
    FrmPromissoria.ShowModal;
  ...

isto resultará no fechamento do FrmFechamento e abertura do FrmPromissoria. Acho que era isto que você queria certo? qualquer coisa posta ai.

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

Elas imprimem mais lento porque os comandos enviados pelos geradores de relatórios não são compatíveis com o que elas entendem, além de imprimir errado.

Por ex: se você tiver que imprimir na col 10 e depois na col 51, pelo gerador ela fica imprimindo brancos até a col 51, ao passo que se você utilizr seus comandos ESC, você pode posicionar o carro da impressora diretamente na col 51.

Veja neste link a partir da página 9 os comandos da Epson.

Link para o comentário
Compartilhar em outros sites

  • 0
Ok Valeu Micheus, mas me responde mais uma pergunta, porque a impressão fica tão lenta na matricial?
Pelo fato de que ela é forçada a operar em modo gráfico ao invez de utilizar o conjunto de caracteres internos.

será que tenho que usar os comandos que o KMKG mandou para ficar mais rápida?
Se você pretende fazer um relatório simples, utilizando os recursos de caracter da impressora, então a melhor opção é mesmo utilizar os comandos ESCAPE's. Apenas, que com eles você vai ter que preocupar-se com o lay-out de saída (planejar) para poder ter um bom resultado. Terá que introduzir os caracteres de controle da impressora que ativam/desativam Negrito, Itálico, mudança de Fonte, tamanho dos fontes, preocupar-se com o tamanho da página, salto de página.... Essas coisas. (mas em se tratando de matricial - vale a pena)

Já se você pretende utilizar gráficos na saída (bitmap's, p.e.), então não vai dar não.

Acho que há componentes que facilitam um pouco esse trabalho. Neste link da X-Maker (é open-source, mas precisa se registrar) tem um "pacote" de componente para impressão direta. Na verdade o que imprime no Spool (como sugere o colega kmkg) é apenas um deles VDODmPrinter (para Delphi 4 a 7). Eu não testei não mas as referências são boas. Dê uma testada. Para você não ter que se registrar, vou postar o download neste link (VDOPrint_3_0_0.zip)

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

Olá.

Olha, depois de penar muito com modelos de impressão, optei por dois processos:

1) Consultas ou Relatórios que podem ser impressos em impressoras jato de tinta e laser, uso o WebBrower, e o usuário tem a opção de consultar apenas no navegados os dados que precisa ou pode fazer sua impressão em qualquer impressora que desejar (principalmente as não-matriciais);

2) Relatórios, notas fiscais, recibos, promissórias, carnês, relatórios fiscais (registro de entrada, saída, livro-caixa, etc - que obrigatoriamente, por lei, só podem ser feitos em matriciais), uso o Canvas do TPrinter... e funciona com qualquer impressora.

Gostaria de saber mais sobre esses métodos?

Poste aqui e então colocarei exemplos...

Ok?

Link para o comentário
Compartilhar em outros sites

  • 0

Oi,

Na linha de impressão de itens (pedido), no code abaixo a rotina somente imprime o último registro do Query1.

Pergunta: Como devo programar para imprimir todos os itens do pedido?

...
  Query1.First; 
  While not Query1.Eof do
   Begin
     Printer.Canvas.TextOut(0, 100, Query1.FieldByName('ref').AsString + '  -- ' + Query1.FieldByName('descricao').AsString);
     Query1.Next;
   end;

Grato,

Link para o comentário
Compartilhar em outros sites

  • 0
Na linha de impressão de itens (pedido), no code abaixo a rotina somente imprime o último registro do Query1.
gilsonlongo, o motivo para isto acontecer é bem evidente. Observe que você está sempre imprimindo a informação na posição X=0 e Y=100:

(...) Printer.Canvas.TextOut(0, 100, Query1.FieldByName('ref').AsString + (...)

Tem como fazer a coisa funcionar corretamente, mas a questão é: vale a pena?

Por que você não utiliza um gererador de relatórios como o QuickReport (ou outro de sua escolha) que já possuem toda a configuração necessária para gerenciar avanços de linha e de página, além de outras características?

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...