Array
(
)

Fiscal Notal demora na geração

Deryck
   - 09 set 2004

Olá...
Preciso de uma ajudinha...

Criei uma rotina para gerar notas fiscais no programa aqui da empresa fiz o teste com 64 notas fiscais e demorou uns 10 minutos...Muito lento...Quando o programa for emitir todas as notas então, que são quase 1000, vai levar o dia inteiro.

Essa rotina verifica se o numero da nota existe...Depois verifica se é iss retido ou não...Depois verifica o tipo de serviço..Tudo isso é gravado em uma tabela (Notas Emitidas).

Segue abaixo o código...
Se alguém puder me ajudar a melhorar isso...

Valeu!



# Inicio do Código

procedure TFormImpressaoNF.BitBtn1Click(Sender: TObject);
var
Inicio, Registros :Integer;
Total, Valor_ISSQN: Double;
begin
IBQuery2.Close;
IBQuery2.SQL.Clear;
IBQUery2.SQL.Add(´Select* from notasfiscaisemitidas where numeronotaEmitida =:Nota´);
IBQUery2.ParamByName(´Nota´).AsString :=(EditNumeroInicial.Text);
IBQuery2.Prepare;
IBQuery2.Open;

if IBQuery2.RecordCount <> 0 then
begin
MessageDlg(´Já foi emitida Alguma Nota Fiscal com essa numeração. Por favor insira outro numero para a nota.´,Mtinformation,[mbOk],0);
EditNumeroInicial.SetFocus;
end
else
begin
Inicio :=(StrToInt(EditNumeroInicial.Text)-1);
DBGrid1.Visible :=False;
DBGrid2.Visible :=True;

BitBtn1.Enabled :=False;
BitBtn3.Enabled :=True;

DmFaturas.IBQueryNotasFiscais.Open;
DmFaturas.IBQueryContratos.First;
While not DmFaturas.IBQueryContratos.Eof do
begin
Valor_ISSQN :=(strToFloat(DmFaturas.IBQueryContratosVALORPARCELAS.AsString)* 5 /(100));
DmFaturas.IBQueryNotasFiscais.Append;
DmFaturas.IBQueryNotasFiscaisDataEmissao.AsString :=MKEditDataEmissao.Text;

if PanelDataVencimento.Visible =True then DmFaturas.IBQueryNotasFiscaisDataVencimento.AsString :=MaskEdit1.Text else DmFaturas.IBQUeryNotasFiscaisDataVencimento.AsString :=DmFaturas.IBQueryContratosDia_Vencimento.AsString +´/´+ (MaskEdit2.Text);

DmFaturas.IBQueryNotasFiscaisCodigoCliente.AsString :=DmFaturas.IBQueryContratosCodigoCliente.AsString;
DmFaturas.IBQUeryNotasFiscaisNumeroContrato.AsString :=DmFaturas.IBQueryContratosNumeroContrato.ASString;
Inicio :=((Inicio)+1);
DmFaturas.IBQueryNotasFiscaisNumeroNota.AsString :=IntToStr(Inicio);
DmFaturas.IBQueryNotasFiscaisdescricaoNATUREZAOP.AsString :=DBLookUpCombobox1.Text;

//===================== ISS Não Retido =======================//

if DmFaturas.IBQueryContratosISS_Retido.AsString = ´NAO´ then
begin
DmFaturas.IBQueryNotasFiscaisVALOR.AsString :=DmFaturas.IBQueryContratosVALORPARCELAS.AsString;
DmFaturas.IBQueryNotasFiscaisISSQN.AsString :=´5,00´;
DmFaturas.IBQueryNotasFiscaisVALORISSQN.AsString :=FormatFloat(´#,,0.00´,abs(Valor_ISSQN));
DmFaturas.IBQueryNotasFiscaisISS_RETIDO.AsString :=´´;
DmFaturas.IBQueryNotasFiscaisVALORISS_RETIDO.AsString :=´´;
DmFaturas.IBQueryNotasFiscaisTOTAL_NOTA.AsString := DmFaturas.IBQueryContratosVALORPARCELAS.AsString;
end;

//===================== ISS Retido =======================//

if DmFaturas.IBQueryContratosISS_Retido.AsString = ´SIM´ then
begin
DmFaturas.IBQueryNotasFiscaisVALOR.AsString :=DmFaturas.IBQueryContratosVALORPARCELAS.AsString;
DmFaturas.IBQueryNotasFiscaisISSQN.AsString :=´0,00´;
DmFaturas.IBQueryNotasFiscaisVALORISS_RETIDO.AsString :=FormatFloat(´#,,0.00´,abs(strToFloat(DmFaturas.IBQueryContratosVALORPARCELAS.AsString))* 5 /(100));
DmFaturas.IBQueryNotasFiscaisISS_RETIDO.AsString :=´ISSQN Retido cfe LEI 8468/02.´;
DmFaturas.IBQueryNotasFiscaisTOTAL_NOTA.AsString :=FormatFloat(´,,0.00´,abs(StrToFloat(DmFaturas.IBQueryContratosVALORPARCELAS.AsString)) - (Valor_ISSQN));
DmFaturas.IBQueryNotasFiscaisVALORISSQN.AsString :=´0,00´;
end;

DmFaturas.IBQueryNotasFiscaisOBSERVACOES.AsString :=Memo1.Text;


if (DmFaturas.IBQueryContratosTipo_SERVICO.AsString = ´TELEMIDIA´){ and
(DmFaturas.IBQueryFaturasParcelado.AsString = ´N´)} then DmFaturas.IBQueryNotasFiscaisDESCRICAO.AsString :=´Referente ao pagamento de servico de espera telefonica personalizado.´;

if (DmFaturas.IBQueryContratosTipo_SERVICO.AsString = ´STUDIO´) then DmFaturas.IBQueryNotasFiscaisDESCRICAO.AsString :=´Referente ao pagamento de servico de Studio.´+´ ´;

if (DmFaturas.IBQueryContratosTipo_SERVICO.AsString = ´EXTRA´) then DmFaturas.IBQueryNotasFiscaisDESCRICAO.AsString :=´Referente ao pagamento de servico extra de Studio.´+´ ´;

DmFaturas.IBQueryNotasFiscais.Post;
DmFaturas.IBQueryContratos.Next;

end;
DmFaturas.IBQueryNotasFiscais.Close;
DmFaturas.IBQueryNotasFiscais.SQL.Clear;
DmFaturas.IBQueryNotasFiscais.SQL.Add(´Select* from NotasFiscais order by NumeroNota´);
DmFaturas.IBQueryNotasFiscais.Prepare;
DmFaturas.IBQueryNotasFiscais.Open;

DSNotasFiscais.DataSet.First;
DSNotasFiscais.DataSet.Last;
DSNotasFiscais.DataSet.First;
Registros := (DmFaturas.IBQueryNotasFiscais.RecordCount);
Label10.Caption :=´Foram geradas ´+(IntToStr(Registros))+´ notas para impressão.´;

IBQUeryTotal.Close;
IBQUeryTotal.Open;
Total := StrToFloat(IBQUeryTotalSUM.AsString);
Label9.Caption :=´Valor Total das Notas: R$ ´+FormatFloat(´#,,0.00´,(Total));
end;
end;

Fim do Código

Com relação a indexa o banco pra melhora a performace, eu ja indexei!


Macario
   - 09 set 2004

Cara mantenha apenas um topico. com certeza algum moderador vai bloquear, caso vc poste muitos.

Poste tambem como manda a impressão pois a demora pode ser na impressão.


Deryck
   - 09 set 2004


Citação:
Cara mantenha apenas um topico. com certeza algum moderador vai bloquear, caso vc poste muitos.

Poste tambem como manda a impressão pois a demora pode ser na impressão.



mas primeir oeu mando gera, depois eu mando imprimi, e na geração de notas qeu ta demorando , me entedeu?


Aroldo Zanela
   - 09 set 2004

Colega,

O Número da nota não pode ser gerado automaticamente ao invés de se obter uma entrada via digitação? DmFaturas.IBQueryContratosISS_Retido.AsString pode ser diferente de SIM e NAO? Senão, está gastando recursos desnecessários com o posicionamento do cursor no banco. Crie um contador, ao invés disto:

DSNotasFiscais.DataSet.First;
DSNotasFiscais.DataSet.Last;
DSNotasFiscais.DataSet.First;


Deryck
   - 09 set 2004


Citação:
Colega,

O Número da nota não pode ser gerado automaticamente ao invés de se obter uma entrada via digitação? DmFaturas.IBQueryContratosISS_Retido.AsString pode ser diferente de SIM e NAO? Senão, está gastando recursos desnecessários com o posicionamento do cursor no banco. Crie um contador, ao invés disto:

DSNotasFiscais.DataSet.First;
DSNotasFiscais.DataSet.Last;
DSNotasFiscais.DataSet.First;



Modifiquei isso que me falou ,mas nao alterou quase nada, tem outra coisa que pode ser ?