Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

J. L. Gregorio

Controlar Impressão no QuickReport

Recommended Posts

Galera, estou desenvolvendo um sistema de impressão de envelopes. Preciso imprimir os envelopes um de cada vez, ou seja, antes de imprimir um envelope deve ser mostrada uma mensagem pedindo para o usuário colocar o envelope na impressora, só depois que ele pressionar ok é que vai começar a impressão. Me falaram que tem como fazer isso imprimindo direto na porta da impressora, será que tem como fazer isso usando o QuickReport? Estou usando o Delphi 5 e se alguém tem alguma outra dica ou sugestão, por favor me ajude.Obrigado.....!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como fazer com o quick sim, basta colocar em um while a sua impressão, colocar a pergunta, caso confirme, passa para o procedimento de criar o relatório, passa o SQL somente para imprimir aquele registro, e manda imprimir...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como fazer com o quick sim, basta colocar em um while a sua impressão, colocar a pergunta, caso confirme, passa para o procedimento de criar o relatório, passa o SQL somente para imprimir aquele registro, e manda imprimir...

Caro colega, tentei fazer o que você me sugeriu, mas não deu certo, veja o código abaixo:

 

with DM.QClientes do //query que estou usando

begin

while not Eof do //abre o while

begin

ShowMessage('Verifique se a impressora está ligada, insira o evelope e pressione OK'); //mostra a mensagem

FImpEnvelopes.QRImpEnvelopes.Print; //manda imprimir

Next; //vai para o próximo registro da query

end;

end;

 

Quando mando imprimir ele não imprime um registro de cada vez, ou seja, ele percorre todo o Laço While mostrando a mensagem que passei e só depois de ter confirmado todos as mensagens é que ele imprime.

 

Eu preciso imprimir um de cada vez, ou seja, a cada envelope que ele for imprimir ele deve mostrar a mensagem, o usuário colocará o envelope na impressora, pressionará OK e aí sim a impressão vai iniciar.

 

Obrigado pela sua atenção e se tiver mais alguma sugestão, por favor me diga.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da forma que montou não teria como imprimir realmente:

DM.QClientes.First;while not DM.QClientes.Eof do //coloca em while	begin	if Application.MessageBox('Verifique se a impressora está ligada, insira o evelope e imprima !','Confirma Impressão',MB_YESNO or MB_APPLMODAL or MB_ICONQUESTION) = mrYes then	FImpEnvelopes:=TFImpEnvelopes.Create(Application); //Cria o relatório	FImpEnvelopes.QRImpEnvelopes.Print; //manda imprimir	FImpEnvelopes.Free //Destrói	DM.QClientes.Next; //vai para o próximo registro da query	end;end;

Não se esqueça que os campos dentro do seu relatório devem de todos estar ligados com a QClientes do DM.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da forma que montou não teria como imprimir realmente:

DM.QClientes.First;while not DM.QClientes.Eof do //coloca em while	begin	if Application.MessageBox('Verifique se a impressora está ligada, insira o evelope e imprima !','Confirma Impressão',MB_YESNO or MB_APPLMODAL or MB_ICONQUESTION) = mrYes then	FImpEnvelopes:=TFImpEnvelopes.Create(Application); //Cria o relatório	FImpEnvelopes.QRImpEnvelopes.Print; //manda imprimir	FImpEnvelopes.Free //Destrói	DM.QClientes.Next; //vai para o próximo registro da query	end;end;
Não se esqueça que os campos dentro do seu relatório devem de todos estar ligados com a QClientes do DM.
Amigo, estamos quase lá...! Fiz como você me sugeriu, ótimo....! Deu certo em parte! Está acontecendo o seguinte agora: Apesar de estar dentro do While ele mostra a Mensagem apenas uma vez, só na primeira impressão e despacha todos os registros para a impressora, depois de imprimir o primeiro envelope, a impressora ejeta a página mas não mostra a mensagem...! Ela fica pausada esperando o novo envelope.....! Imprime corretamente, mas não mostra a mensagem!!! Seria interessante para o usuário que a mensagem aparecesse......! Mais alguma sugestão?Obrigado e abraços....!

Da forma que montou não teria como imprimir realmente:

DM.QClientes.First;while not DM.QClientes.Eof do //coloca em while	begin	if Application.MessageBox('Verifique se a impressora está ligada, insira o evelope e imprima !','Confirma Impressão',MB_YESNO or MB_APPLMODAL or MB_ICONQUESTION) = mrYes then	FImpEnvelopes:=TFImpEnvelopes.Create(Application); //Cria o relatório	FImpEnvelopes.QRImpEnvelopes.Print; //manda imprimir	FImpEnvelopes.Free //Destrói	DM.QClientes.Next; //vai para o próximo registro da query	end;end;
Não se esqueça que os campos dentro do seu relatório devem de todos estar ligados com a QClientes do DM.
Amigo, estamos quase lá...! Fiz como você me sugeriu, ótimo....! Deu certo em parte! Está acontecendo o seguinte agora: Apesar de estar dentro do While ele mostra a Mensagem apenas uma vez, só na primeira impressão e despacha todos os registros para a impressora, depois de imprimir o primeiro envelope, a impressora ejeta a página mas não mostra a mensagem...! Ela fica pausada esperando o novo envelope.....! Imprime corretamente, mas não mostra a mensagem!!! Seria interessante para o usuário que a mensagem aparecesse......! Mais alguma sugestão?Obrigado e abraços....!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como já expliquei anteriormente, seria preciso que você estivesse usando uma query dentro do próprio quick para imprimir, e os campos vinculados com esta query. Pois você executa um while sobre uma query que contem todos os registros, no momento que vai abrir, ele vai trazer todos os registros, seria preciso que você sempre posicionasse no registro desejado, ou então usar uma outra query e sempre repassar o sql para a mesma posicionando no cliente desejado...

 

DM.QClientes.First;while not DM.QClientes.Eof do //coloca em while	begin	if Application.MessageBox('Verifique se a impressora está ligada, insira o evelope e imprima !','Confirma Impressão',MB_YESNO or MB_APPLMODAL or MB_ICONQUESTION) = mrYes then		begin		FImpEnvelopes:=TFImpEnvelopes.Create(Application); //Cria o relatório		FImpEnvelopes.qryDentro_Do_Quick.Close;		FImpEnvelopes.qryDentro_Do_Quick.SQL.Clear;		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('select *');		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('from tabela_desejada');		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('where tabela_desejada.campo_chave = ' + IntToStr(DM.QClientesCODIGO.Value));		FImpEnvelopes.qryDentro_Do_Quick.Open;		FImpEnvelopes.QRImpEnvelopes.Print; //manda imprimir		FImpEnvelopes.Free //Destrói				end;	DM.QClientes.Next; //vai para o próximo registro da query	end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como já expliquei anteriormente, seria preciso que você estivesse usando uma query dentro do próprio quick para imprimir, e os campos vinculados com esta query. Pois você executa um while sobre uma query que contem todos os registros, no momento que vai abrir, ele vai trazer todos os registros, seria preciso que você sempre posicionasse no registro desejado, ou então usar uma outra query e sempre repassar o sql para a mesma posicionando no cliente desejado...

DM.QClientes.First;while not DM.QClientes.Eof do //coloca em while	begin	if Application.MessageBox('Verifique se a impressora está ligada, insira o evelope e imprima !','Confirma Impressão',MB_YESNO or MB_APPLMODAL or MB_ICONQUESTION) = mrYes then		begin		FImpEnvelopes:=TFImpEnvelopes.Create(Application); //Cria o relatório		FImpEnvelopes.qryDentro_Do_Quick.Close;		FImpEnvelopes.qryDentro_Do_Quick.SQL.Clear;		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('select *');		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('from tabela_desejada');		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('where tabela_desejada.campo_chave = ' + IntToStr(DM.QClientesCODIGO.Value));		FImpEnvelopes.qryDentro_Do_Quick.Open;		FImpEnvelopes.QRImpEnvelopes.Print; //manda imprimir		FImpEnvelopes.Free //Destrói				end;	DM.QClientes.Next; //vai para o próximo registro da query	end;
Tentei fazer exatemente isso que você fez.... coloquei duas Querys.... a primeira trouxe os dados desejados e a segunda (Dentro do QuickReport) trouxe um registro de cada vez, conectei os campos do Relatório a query dele mesmo.... mas infelizmente continuou da mesma maneira, será que estou errando algo?Por enquanto vou deixar assim, dá pro usuário ir usando mas ainda aceitando sugestões... Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como já expliquei anteriormente, seria preciso que você estivesse usando uma query dentro do próprio quick para imprimir, e os campos vinculados com esta query. Pois você executa um while sobre uma query que contem todos os registros, no momento que vai abrir, ele vai trazer todos os registros, seria preciso que você sempre posicionasse no registro desejado, ou então usar uma outra query e sempre repassar o sql para a mesma posicionando no cliente desejado...

DM.QClientes.First;while not DM.QClientes.Eof do //coloca em while	begin	if Application.MessageBox('Verifique se a impressora está ligada, insira o evelope e imprima !','Confirma Impressão',MB_YESNO or MB_APPLMODAL or MB_ICONQUESTION) = mrYes then		begin		FImpEnvelopes:=TFImpEnvelopes.Create(Application); //Cria o relatório		FImpEnvelopes.qryDentro_Do_Quick.Close;		FImpEnvelopes.qryDentro_Do_Quick.SQL.Clear;		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('select *');		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('from tabela_desejada');		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('where tabela_desejada.campo_chave = ' + IntToStr(DM.QClientesCODIGO.Value));		FImpEnvelopes.qryDentro_Do_Quick.Open;		FImpEnvelopes.QRImpEnvelopes.Print; //manda imprimir		FImpEnvelopes.Free //Destrói				end;	DM.QClientes.Next; //vai para o próximo registro da query	end;
Amigo, lembrei de um detalhe....! Estou usando uma impressora em rede! Os dados são transmitidos todos para o gerenciador de impressão do computador servidor de impressão, acho que é por isso que não está dando certo! Vou testar em uma impressora local e depois eu te falo, ok!? Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como já expliquei anteriormente, seria preciso que você estivesse usando uma query dentro do próprio quick para imprimir, e os campos vinculados com esta query. Pois você executa um while sobre uma query que contem todos os registros, no momento que vai abrir, ele vai trazer todos os registros, seria preciso que você sempre posicionasse no registro desejado, ou então usar uma outra query e sempre repassar o sql para a mesma posicionando no cliente desejado...

DM.QClientes.First;while not DM.QClientes.Eof do //coloca em while	begin	if Application.MessageBox('Verifique se a impressora está ligada, insira o evelope e imprima !','Confirma Impressão',MB_YESNO or MB_APPLMODAL or MB_ICONQUESTION) = mrYes then		begin		FImpEnvelopes:=TFImpEnvelopes.Create(Application); //Cria o relatório		FImpEnvelopes.qryDentro_Do_Quick.Close;		FImpEnvelopes.qryDentro_Do_Quick.SQL.Clear;		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('select *');		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('from tabela_desejada');		FImpEnvelopes.qryDentro_Do_Quick.SQL.Add('where tabela_desejada.campo_chave = ' + IntToStr(DM.QClientesCODIGO.Value));		FImpEnvelopes.qryDentro_Do_Quick.Open;		FImpEnvelopes.QRImpEnvelopes.Print; //manda imprimir		FImpEnvelopes.Free //Destrói				end;	DM.QClientes.Next; //vai para o próximo registro da query	end;
Amigo, lembrei de um detalhe....! Estou usando uma impressora em rede! Os dados são transmitidos todos para o gerenciador de impressão do computador servidor de impressão, acho que é por isso que não está dando certo! Vou testar em uma impressora local e depois eu te falo, ok!? Abraços!
Reamente, mesmo imprimindo localmente, ele mostra apenas uma vez a mensagem e não pára a impressão. Tudo bem, assim já serve para mim.... Obrigado pela dica... Abraços....!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.