GARANTIR DESCONTO

Fórum Impressao lenta pela matricial #357549

24/04/2008

0

Iai Galera,

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

Tremonti

Responder

Posts

24/04/2008

Paulo

O Tprinter deixa lenta mesmo a impressão, devido ao driver da impressora. Eu normalmente uso sem driver de impressão. Eu uso assim:


AssignPrn(prn);//Imprime na impressora padrão Rewrite(prn); if IOResult <> 0 then raise Exception.Create(´Erro ao abrir a Impressora.´); //Abaixo imprimo meus itens var lin: Integer; begin lin := 0; vTotal_Geral := 0; vTotal_Dia := 0; cdsVenda.First; while not cdsVenda.Eof do begin inc(lin); Writeln(prn, AjustaNum(cdsVenda.Fields[0].AsString, 6) + ´ ´ + AnsiToAscii(AjustaStr(cdsVenda.Fields[1].ASString, 32)) + ´ ´ + AjustaStr(´´, 5) + ´ ´ + AjustaNum(FormatFloat(´#,,0.00´,cdsVenda.FieldByName(´DIA´).AsFloat),12) + ´ ´ + AjustaNum(FormatFloat(´,,0.00´,cdsVenda.FieldByName(´VENDA ACUMULADA´).AsFloat),12)) ; vTotal_Dia := vTotal_Dia + cdsVenda.FieldByName(´DIA´).AsFloat; vTotal_Geral := vTotal_Geral + cdsVenda.FieldByName(´VENDA ACUMULADA´).AsFloat; cdsVenda.Next; //Reimprime o cabeçalho, caso o papel já está no final if (lin = 56) and (not cdsVenda.Eof) then Imprime_Cabecalho; //Imprime o total geral if cdsVenda.Eof then begin writeln(Prn, RelRepStr(´-´, 80)); Writeln(prn, AjustaNum(´Total Geral:´,40) + ´ ´ + AjustaNum(FormatFloat(´#,,0.00´,vTotal_Dia),12) + ´ ´ + AjustaNum(FormatFloat(´,,0.00´,vTotal_Geral),12)); end; end; end;

Não usei o Tprinter, mas usei a unit Printers para configurar as fontes e etc... Tem como fazer sem usar a unit Printers.


Responder

Gostei + 0

25/04/2008

Ffabiop

Olha o seu código:

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.


Responder

Gostei + 0

25/04/2008

Tremonti

Valew Pessoal...

[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]


Responder

Gostei + 0

25/04/2008

Ffabiop

Melhora sim, pois a cabeça de impressão vai listar a linha toda numa só passada. Nos casos de listagem com matricial o ideal é que a cabeça va e volte imprimindo.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar