Qual o problema dessa procedure???
procedure TFormOslancar1.Button1Click(Sender: TObject);
begin
if Dados.IBTableOPX.Eof then
begin
FormOslancar1.Close;
end
Else
begin
Printer.BeginDoc;
//inicia o documento de impressão e configura fonte
//e vai para o primeiro campo da tabela
Printer.Canvas.Font.Name := ´Arial´;
Printer.Canvas.Font.Size := 8;
//sobre a primeira linha da os
Printer.Canvas.TextOut(1175, 80, numerostring);
Printer.Canvas.TextOut(1750, 80, Dados.IBTableOPX[´OPERACAO´]);
Printer.Canvas.TextOut(1830, 80, ´-´);
Printer.Canvas.TextOut(1855, 80, Dados.IBTableOPX[´DESCRICAO´]);
//sobre a segunda linha
Printer.Canvas.TextOut(260, 170, Dados.IBTableOSGERAL[´CODIGO_PRODUTO´]);
Printer.Canvas.TextOut(1000, 170, Dados.IBTableOSGERAL[´DATA_EMISSAO´]);
Printer.Canvas.TextOut(1350, 170, ´145´);
Printer.Canvas.TextOut(2050, 170, ´10000´);
//sobre a terceira linha
//FAZ UMA PESQUISA
Dados.IBTablePECA.Open;
Dados.IBTablePECA.Locate(´CODIGO´,Dados.IBTableOSGERAL[´CODIGO_PRODUTO´],[]);
Printer.Canvas.TextOut(320, 235, Dados.IBTablePECA[´DENOMINACAO´]);
Dados.IBTablePECA.Close;
//sobre a quarta linha
Printer.Canvas.TextOut(260, 300, Dados.IBTableOPX[´EQUIPAMENTO´]);
Printer.Canvas.TextOut(800, 300, Edit1.Text);
//sobre a quinta linha
Printer.Canvas.TextOut(750, 365, Edit2.Text);
Printer.Canvas.Font.Size := 10;
Printer.Canvas.TextOut(1350, 350, ´PEÇAS POR HORA:´);
Printer.Canvas.TextOut(1790, 350, Dados.IBTableOPX[´PECAS_HORA´]);
Dados.IBTableOPX.Next;
//termino do documento de impressão
Printer.EndDoc;
end;
end;
porque a impressão se realiza apenas no primeiro clique???
outros cliques não fazem a impressão???
grato pela ajuda.
begin
if Dados.IBTableOPX.Eof then
begin
FormOslancar1.Close;
end
Else
begin
Printer.BeginDoc;
//inicia o documento de impressão e configura fonte
//e vai para o primeiro campo da tabela
Printer.Canvas.Font.Name := ´Arial´;
Printer.Canvas.Font.Size := 8;
//sobre a primeira linha da os
Printer.Canvas.TextOut(1175, 80, numerostring);
Printer.Canvas.TextOut(1750, 80, Dados.IBTableOPX[´OPERACAO´]);
Printer.Canvas.TextOut(1830, 80, ´-´);
Printer.Canvas.TextOut(1855, 80, Dados.IBTableOPX[´DESCRICAO´]);
//sobre a segunda linha
Printer.Canvas.TextOut(260, 170, Dados.IBTableOSGERAL[´CODIGO_PRODUTO´]);
Printer.Canvas.TextOut(1000, 170, Dados.IBTableOSGERAL[´DATA_EMISSAO´]);
Printer.Canvas.TextOut(1350, 170, ´145´);
Printer.Canvas.TextOut(2050, 170, ´10000´);
//sobre a terceira linha
//FAZ UMA PESQUISA
Dados.IBTablePECA.Open;
Dados.IBTablePECA.Locate(´CODIGO´,Dados.IBTableOSGERAL[´CODIGO_PRODUTO´],[]);
Printer.Canvas.TextOut(320, 235, Dados.IBTablePECA[´DENOMINACAO´]);
Dados.IBTablePECA.Close;
//sobre a quarta linha
Printer.Canvas.TextOut(260, 300, Dados.IBTableOPX[´EQUIPAMENTO´]);
Printer.Canvas.TextOut(800, 300, Edit1.Text);
//sobre a quinta linha
Printer.Canvas.TextOut(750, 365, Edit2.Text);
Printer.Canvas.Font.Size := 10;
Printer.Canvas.TextOut(1350, 350, ´PEÇAS POR HORA:´);
Printer.Canvas.TextOut(1790, 350, Dados.IBTableOPX[´PECAS_HORA´]);
Dados.IBTableOPX.Next;
//termino do documento de impressão
Printer.EndDoc;
end;
end;
porque a impressão se realiza apenas no primeiro clique???
outros cliques não fazem a impressão???
grato pela ajuda.
Gandalf
Curtidas 0
Respostas
Halexmaciel
17/11/2003
Estranho, vc faz uma verificação de a tabela está no último registro, se estiver, vc excuta o restante da procedure, vc já verificou se todas as vezes que vc vai no evento onclick do button a tabela que vc está comparando no if está no último registro da tabela?
GOSTEI 0
Gandalf
17/11/2003
na verdade se estiver no ultimo registro ela fecha a janela
a tabela é de peças e cada peça tem diversas operações
cada operação tem de ser impresso uma por vez pelo fato de ser cartão e não cabe todos na impressora, alem do mais cada operação tem detalhes que precisam ser cadastrados
por isso se nao esta na ultima operação tem de imprimir
o que acontece e que so o primeiro registro e impresso os demais nao
qual o problema?????
grato pela atenção
a tabela é de peças e cada peça tem diversas operações
cada operação tem de ser impresso uma por vez pelo fato de ser cartão e não cabe todos na impressora, alem do mais cada operação tem detalhes que precisam ser cadastrados
por isso se nao esta na ultima operação tem de imprimir
o que acontece e que so o primeiro registro e impresso os demais nao
qual o problema?????
grato pela atenção
GOSTEI 0
Ricvictor
17/11/2003
Olá Gandalf ...
cára, pelo que saquei na tua procedure, em momento algum você está chamando o segundo registro da tua tabela ... você está usando o ´Dados.IBTableOPX.Next;´ ... blz, mas como não está dentro de nenhum laço, esse Next não vai te ajudar muito não !! O ´IF´ que você está usando só vai estar sendo realizado uma única vez ...
if Dados.IBTableOPX.Eof then
close
else
faz uma única vez o que tiver aqui !!
A não ser que você utilize while ... quero dizer assim:
procedure TFormOslancar1.Button1Click(Sender: TObject);
begin
if Dados.IBTableOPX.Eof then
begin
FormOslancar1.Close;
end
Else
begin //begin do else
Printer.BeginDoc;
//inicia o documento de impressão e configura fonte
Printer.Canvas.Font.Name := ´Arial´;
Printer.Canvas.Font.Size := 8;
while not Dados.IBTableOPX.Eof do
begin //begin do while
//sobre a primeira linha da os
Printer.Canvas.TextOut(1175, 80, numerostring);
Printer.Canvas.TextOut(1750, 80, Dados.IBTableOPX[´OPERACAO´]);
Printer.Canvas.TextOut(1830, 80, ´-´);
Printer.Canvas.TextOut(1855, 80, Dados.IBTableOPX[´DESCRICAO´]);
//sobre a segunda linha
Printer.Canvas.TextOut(260, 170, Dados.IBTableOSGERAL[´CODIGO_PRODUTO´]);
Printer.Canvas.TextOut(1000, 170, Dados.IBTableOSGERAL[´DATA_EMISSAO´]);
Printer.Canvas.TextOut(1350, 170, ´145´);
Printer.Canvas.TextOut(2050, 170, ´10000´);
//sobre a terceira linha
//FAZ UMA PESQUISA
Dados.IBTablePECA.Open;
Dados.IBTablePECA.Locate(´CODIGO´,Dados.IBTableOSGERAL[´CODIGO_PRODUTO´],[]);
Printer.Canvas.TextOut(320, 235, Dados.IBTablePECA[´DENOMINACAO´]);
Dados.IBTablePECA.Close;
//sobre a quarta linha
Printer.Canvas.TextOut(260, 300, Dados.IBTableOPX[´EQUIPAMENTO´]);
Printer.Canvas.TextOut(800, 300, Edit1.Text);
//sobre a quinta linha
Printer.Canvas.TextOut(750, 365, Edit2.Text);
Printer.Canvas.Font.Size := 10;
Printer.Canvas.TextOut(1350, 350, ´PEÇAS POR HORA:´);
Printer.Canvas.TextOut(1790, 350, Dados.IBTableOPX[´PECAS_HORA´]);
Dados.IBTableOPX.Next;
end; //end do while
//termino do documento de impressão
Printer.EndDoc;
end; //end do else
end;
Valeu ?! :wink:
Um abraço.
RicVictor - Natal/RN.
cára, pelo que saquei na tua procedure, em momento algum você está chamando o segundo registro da tua tabela ... você está usando o ´Dados.IBTableOPX.Next;´ ... blz, mas como não está dentro de nenhum laço, esse Next não vai te ajudar muito não !! O ´IF´ que você está usando só vai estar sendo realizado uma única vez ...
if Dados.IBTableOPX.Eof then
close
else
faz uma única vez o que tiver aqui !!
A não ser que você utilize while ... quero dizer assim:
procedure TFormOslancar1.Button1Click(Sender: TObject);
begin
if Dados.IBTableOPX.Eof then
begin
FormOslancar1.Close;
end
Else
begin //begin do else
Printer.BeginDoc;
//inicia o documento de impressão e configura fonte
Printer.Canvas.Font.Name := ´Arial´;
Printer.Canvas.Font.Size := 8;
while not Dados.IBTableOPX.Eof do
begin //begin do while
//sobre a primeira linha da os
Printer.Canvas.TextOut(1175, 80, numerostring);
Printer.Canvas.TextOut(1750, 80, Dados.IBTableOPX[´OPERACAO´]);
Printer.Canvas.TextOut(1830, 80, ´-´);
Printer.Canvas.TextOut(1855, 80, Dados.IBTableOPX[´DESCRICAO´]);
//sobre a segunda linha
Printer.Canvas.TextOut(260, 170, Dados.IBTableOSGERAL[´CODIGO_PRODUTO´]);
Printer.Canvas.TextOut(1000, 170, Dados.IBTableOSGERAL[´DATA_EMISSAO´]);
Printer.Canvas.TextOut(1350, 170, ´145´);
Printer.Canvas.TextOut(2050, 170, ´10000´);
//sobre a terceira linha
//FAZ UMA PESQUISA
Dados.IBTablePECA.Open;
Dados.IBTablePECA.Locate(´CODIGO´,Dados.IBTableOSGERAL[´CODIGO_PRODUTO´],[]);
Printer.Canvas.TextOut(320, 235, Dados.IBTablePECA[´DENOMINACAO´]);
Dados.IBTablePECA.Close;
//sobre a quarta linha
Printer.Canvas.TextOut(260, 300, Dados.IBTableOPX[´EQUIPAMENTO´]);
Printer.Canvas.TextOut(800, 300, Edit1.Text);
//sobre a quinta linha
Printer.Canvas.TextOut(750, 365, Edit2.Text);
Printer.Canvas.Font.Size := 10;
Printer.Canvas.TextOut(1350, 350, ´PEÇAS POR HORA:´);
Printer.Canvas.TextOut(1790, 350, Dados.IBTableOPX[´PECAS_HORA´]);
Dados.IBTableOPX.Next;
end; //end do while
//termino do documento de impressão
Printer.EndDoc;
end; //end do else
end;
Valeu ?! :wink:
Um abraço.
RicVictor - Natal/RN.
GOSTEI 0