Fiscal Notal demora na geração
09/09/2004
0
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!
Deryck
Posts
09/09/2004
Macario
Poste tambem como manda a impressão pois a demora pode ser na impressão.
09/09/2004
Deryck
mas primeir oeu mando gera, depois eu mando imprimi, e na geração de notas qeu ta demorando , me entedeu?
09/09/2004
Aroldo Zanela
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;
09/09/2004
Deryck
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;[/quote:7fa800f046]
Modifiquei isso que me falou ,mas nao alterou quase nada, tem outra coisa que pode ser ?
Clique aqui para fazer login e interagir na Comunidade :)