Fórum Impressao lenta pela matricial #357549
24/04/2008
0
Tenho impressão de nota fiscal pelo meu sistema.
Numa impressora matricial.
Porém os usuários me alegaram que a impressão está muito devagar.
Estou enviando o código abaixo.
Existe alguma forma de melhorá-lo para que fique mais rápido?
Abraços
with Printer do begin
PrinterIndex := -1; {seleciona impressora default do windows}
AjustaPag_NotaUn();
BeginDoc;
Canvas.Font.Name := ´Draft 12CPI´;
FatorY := 10;
with Canvas do begin
// TextOut(80*FatorY,0*17,´.´);
// TextOut(85*FatorY,1*17,´.´);
//TextOut(830-20,00 ,mNrNota); //Nr da Nota
TextOut( 850 , 16 ,mNrNota); //Nr da Nota
//Canhoto TextOut(930,20 ,RightStr(mNrNota,6)); //Nota Fiscal Série 2
//TextOut(570,2 ,mSaida); //Tipo de Nota
//TextOut(650,2 ,mEntrada); //Tipo de Nota
TextOut(630,16 ,mSaida); //Tipo de Nota
TextOut(680,16 ,mEntrada); //Tipo de Nota
TextOut(30 ,120,mNatOper); //Natureza da Operação
//TextOut(300,120,mCdNatOper); //CFOP
TextOut(190,120,mCdNatOper); //CFOP
{ BLOCO 1 DE DESTINATÁRIO/REMETENTE }
Font.Style := [fsBold];
TextOut(30,170,mNmCli); //Nome / Razão Social
Font.Style := [];
TextOut(610,170,mCGC_CPF); //CNPJ / CPF
{ BLOCO 2 DE DESTINATÁRIO/REMETENTE }
TextOut(370,200,mBairro); //Bairro/Distrito
//TextOut(780,200,mDtEmiss); //Data Saída / Entrada
TextOut(820,200,mDtEmiss); //Data Saída / Entrada
//TextOut(780,240,TimeToStr(Now)); //Hora Saída
TextOut(820,240,TimeToStr(Now)); //Hora Saída
//TextOut(780,170,mDtEmiss); //DATA DE EMISSAO
TextOut(820,170,mDtEmiss); //DATA DE EMISSAO
Font.Name := ´Sans Serif 17CPI´;
TextOut(30 ,200,mEnd); //Endereço
Font.Name := ´Draft 12CPI´;
{ BLOCO 3 DE DESTINATÁRIO/REMETENTE }
// TextOut(590,240,mCep); //Inscrição Estadual
TextOut(30,240,mCidade); //Município
TextOut(350,240,mTel); //Fone/Fax
TextOut(580,240,mEstado); //UF
TextOut(670,240,mInscEst); //EM BRANCO
Font.Name := ´Sans Serif 17CPI´;
FatorY := 315;
for a := 1 to 33 do begin
if mDescPrd[a] = ´´ then Break;
TextOut(30 ,FatorY,mDescPrd[a]); //Descrição do Produto
Font.Style := [fsBold];
TextOut(440 ,FatorY,mClassFisc[a]); //C.L Fisc
Font.Style := [];
TextOut(460 ,FatorY,´000´); //Situação Tributária
TextOut(480 ,FatorY,mUnid[a]); //Unidade
TextOut(520 ,FatorY,mQuant[a]); //Quantidade
TextOut(580 ,FatorY,mVlUnit[a]); //Valor Unitario
TextOut(670 ,FatorY,mVlTot[a]); //Valor Total
TextOut(770 ,FatorY,mAliqICM[a]); //ICMS
FatorY := FatorY + 20;
end;
Font.Name := ´Draft 12CPI´;
if Tag = 1 then { Nota de Devolução }
//TextOut(320 , 720 , mObs );
TextOut( 250 , 960 , mObs );
//TextOut(050,800,mTotProd); //Base de Cálculo do ICMS
TextOut( 50 , 1060 ,mTotProd); //Base de Cálculo do ICMS
TextOut( 200 , 1060 ,FormatFloat( ´#,0.00´ , mSubTot * (qryItDoc.FieldByName(´AliqICMS´).AsFloat / 100)) ); //Valor do ICMS
TextOut( 780, 1060,mTotProd); //Valor Total dos Produtos
Font.Style := [fsBold];
TextOut(780,1100,mTotNota); //Valor Total da Nota
Font.Style := [];
{ for i := 1100 to 1600 do begin
TextOut( 50 , i , IntToStr( i ) );
iAux := iAux + 30;
end;}
{ Dados Adicionais - Informações Complementares }
FatorY := 1300;
FatorX := 30;
iAux := 1;
{ Gera observações referentes a Classificação Fiscal }
qryAgrupamentos.Open;
while not qryAgrupamentos.Eof do begin
TextOut( FatorX , FatorY , qryAgrupamentosCLASSFISC.AsString );
if iAux = 5 then begin { muda de coluna pois já estourou limite de espaço }
FatorX := FatorX + 130;
FatorY := 1300;
iAux := 1;
end
else begin { continua o processo normal }
FatorY := FatorY + 20;
Inc( iAux );
end;
qryAgrupamentos.Next;
end;
qryAgrupamentos.Close;
TextOut( 850 , 1500 , mNrNota);
end;
EndDoc;
end;
Tremonti
Curtir tópico
+ 0Posts
24/04/2008
Paulo
Não usei o Tprinter, mas usei a unit Printers para configurar as fontes e etc... Tem como fazer sem usar a unit Printers.
Gostei + 0
25/04/2008
Ffabiop
for a := 1 to 33 do begin if mDescPrd[a] = ´´ then Break; TextOut(30 ,FatorY,mDescPrd[a]); //Descrição do Produto Font.Style := [fsBold]; TextOut(440 ,FatorY,mClassFisc[a]); //C.L Fisc Font.Style := []; TextOut(460 ,FatorY,´000´); //Situação Tributária TextOut(480 ,FatorY,mUnid[a]); //Unidade TextOut(520 ,FatorY,mQuant[a]); //Quantidade TextOut(580 ,FatorY,mVlUnit[a]); //Valor Unitario TextOut(670 ,FatorY,mVlTot[a]); //Valor Total TextOut(770 ,FatorY,mAliqICM[a]); //ICMS FatorY := FatorY + 20; end;
Acontece que o sistema está mandandando um campo de cada vez para a impressora e isso imperra a impressão mesmo. Olhe como se comporta a impressora quando ela está emitindo especialmente essa parte aí dos itens da nota, observe ela imprimendo um campo de cada vez...
Para resolver, mande a linha toda de uma vez para a impressora posicinando os campos por meio de espacamento entre eles... Assim como o Paulo fez. Independente de TPrinter ou Writeln vai resolver a situação.
Gostei + 0
25/04/2008
Tremonti
[b:7a349af934]Paulo[/b:7a349af934], você pode me enviar este seu código completo, para ver qual é o processo que você faz?
[b:7a349af934]ffabiop[/b:7a349af934], será que se eu enviar uma linha completa melhora em relação a velocidade?
[color=red:7a349af934]Obrigado Galera![/color:7a349af934]
Gostei + 0
25/04/2008
Ffabiop
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)