GARANTIR DESCONTO

Fórum consulta x gravação - Melhorar performace #39214

07/10/2003

0

Prezado senhores

Tenho dois clientes que estão com problemas na gravação e consulta nas seguites condicões.

1 Cliente) Utiliza equipamento . Um servidor e estação. Usando win98se. Este usa o servidor com maquina de trabalho.

2 Cliente) Utliza 6 equipamento. Um servidor com win NT e cinco estações. Este usa o servidor dedicado.

Utilizo o firebird nos dois. O problema é o seguinte nos dois casos acima.

Enquanto um equipamento está gravando. A consulta nos outros terminais fica lenta. Só libera quando termina a gravação.

Esta aplicação é para supermercado. Em algumas vendas há uma quantidade de itens muito grande.

Gostaria que me ajudassem dando dicas de como melhoar a performance do banco para que enquanto tiver gravando a consulta seja mais rápida.

Já fiz algumas pesquisas mas não conseguir ajustar o sistema tenho certeza que algum parametros no firebird pode melhorar este problema.

Ja verifique se estava deixando alguma transação aberta. Coloquei indices que achei importante e algumas coisas que não me lembro agora. Até pensei em usar firebidn 1.5 mas não sei até que ponto poderia melhorar.

O que mais poderia fazer ? Aceito as sugestões.

Grato mais uma vez pela colobaração.

Marcos Roberto


Marcosrodias

Marcosrodias

Responder

Posts

07/10/2003

Afarias

bom... está complicado...

nunca vi isto ocorrer... talvês se vc colocasse mais detalhes de sua implementação (códigos de gravação, consulta, etc...) fique mais fácil poder dizer o q está havendo.


T+


Responder

Gostei + 0

07/10/2003

Marcosrodias

Ola

Segue rotina da gravação dos dados + duas procedures que faz atualizações dos itens.

Algumas funções dentra da procedure não está ai mas veja acho que dá para entender.

Agradeco desde já pela força.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Acho que o problema pode esta aqui nestas procedures

/* Atualiza Estoque dos Itens da Venda */
Set Term ^;
Create Procedure Proc_Est_Venda_Itens(sData Date ,iCliente Integer, iFilial Integer,
iSerie Integer , iNumero Integer, sUsuario VarChar(20),
sDestino Char(01))
As
Declare Variable iRegistro Integer;
Begin
Insert Into Saida(Codigo_Produto, Codigo_Filial, Codigo_Fornecedor, Codigo_Cliente,
Codigo_OpeEstoque, Qtd_Saida, Custo_Medio,
Custo_Final, Data_Saida, Documento, Numero_Venda, Destino)
Select Orcamento_Tmp.Codigo_Produto, :iFilial,1, :iCliente,
2, Qtd, 0,
Produto.Custo_Produto, :sData, ´Venda´, Cast(:iNumero As Char(12))||´-´||
Cast(:iSerie As Char(02)), :sDestino
From Orcamento_Tmp, Produto
Where Tipo_Item = ´V´
And Orcamento_Tmp.Codigo_Produto = Produto.Codigo_Produto
And Produto.Vincula_Estoque = ´S´
And (Classe = ´P´ Or Classe = ´C´)
And Usuario = :sUsuario;

Insert Into Saida_Grade(Codigo_Produto, Codigo_Filial, Codigo_Grade,
Codigo_Cliente, Codigo_Fornecedor, Codigo_OpeEstoque ,Qtd_Saida,
Data_Saida, Numero_Venda, Destino)
Select Orcamento_Grade_Tmp.Codigo_Produto, :iFilial , Orcamento_Grade_Tmp.Codigo_Grade,
:iCliente, 1 , 2 ,Qtd,
:sData, Cast(:iNumero As Char(12))||´-´||
Cast(:iSerie As Char(02)), :sDestino
From Orcamento_Grade_Tmp, Grade, Produto
Where Orcamento_Grade_Tmp.Codigo_Produto = Grade.Codigo_Produto
And Orcamento_Grade_Tmp.Codigo_Grade = Grade.Codigo_Grade
And Orcamento_Grade_Tmp.Codigo_Produto = Produto.Codigo_Produto
And Produto.Vincula_Estoque = ´S´
And (Classe = ´P´ Or Classe = ´C´)
And Tipo_Item = ´V´
And Usuario = :sUsuario And Qtd <> 0 ;

Update Estoque SET Estoque.Ultima_Venda = :sData,
Estoque.Ultima_Movimento = :sData
Where Estoque.Codigo_Filial = :iFilial
And Exists (Select Orcamento_Tmp.Codigo_Produto From Orcamento_Tmp
Where Usuario = :sUsuario
And Estoque.Codigo_Produto = Orcamento_Tmp.Codigo_Produto
And Tipo_Item = ´V´);

Insert Into Entrada (Codigo_Produto, Codigo_Filial, Codigo_Fornecedor,
Codigo_OpeEstoque, Qtd_Entrada, Custo_Medio,
Custo_Final, Data_Entrada, Documento, Numero_Compra, Destino)
Select Orcamento_Tmp.Codigo_Produto, :iFilial,1,
5, Qtd, 0,
Produto.Custo_Produto, :sData, ´Venda´, Cast(:iNumero As Char(12))||´-´||
Cast(:iSerie As Char(02)), :sDestino

From Orcamento_Tmp, Produto
Where Tipo_Item = ´T´
And Orcamento_Tmp.Codigo_Produto = Produto.Codigo_Produto
And Produto.Vincula_Estoque = ´S´
And (Classe = ´P´ Or Classe = ´C´)
And Usuario = :sUsuario;

Insert Into Entrada_Grade(Codigo_Produto, Codigo_Filial, Codigo_Grade,
Codigo_Fornecedor, Codigo_OpeEstoque,Qtd_Entrada,
Data_Entrada, Numero_Compra, Destino)
Select Orcamento_Grade_Tmp.Codigo_Produto, :iFilial , Orcamento_Grade_Tmp.Codigo_Grade,
1 ,5 , Qtd,
:sData,Cast(:iNumero As Char(12))||´-´||
Cast(:iSerie As Char(02)), :sDestino
From Orcamento_Grade_Tmp, Grade, Produto
Where Orcamento_Grade_Tmp.Codigo_Produto = Grade.Codigo_Produto
And Orcamento_Grade_Tmp.Codigo_Grade = Grade.Codigo_Grade
And Orcamento_Grade_Tmp.Codigo_Produto = Produto.Codigo_Produto
And Produto.Vincula_Estoque = ´S´
And (Classe = ´P´ Or Classe = ´C´)
And Tipo_Item = ´T´
And Usuario = :sUsuario And Qtd <> 0 ;

End ^
Set Term ^ ;


/* Grava Itens de Venda */
Set Term ^;
Alter Procedure Proc_Grava_Venda_Itens(sData Date, iCliente Integer, iFilial Integer,
iSerie Integer, iNumero Integer,
sUsuario VarChar(20), cAutoma Char(01))
As
Declare Variable iConta integer;
Begin
Select count(*) From Parametro into :iConta;
If (iConta = 0) Then
Begin
Insert Into Parametro
(Imposto_Federal,
Imposto_Estadual,
Imposto_Municipal,
Custo_Operacional,
Custo_Comissao,
Custo_Encargos,

Percentual_Custo1,
Percentual_Custo2,
Percentual_Custo3,
Percentual_Custo4,
Percentual_Custo5,
Percentual_Custo6)

Values (0,0,0,0,0,0,0,0,0,0,0,0);
End

If (:cAutoma = ´S´) Then
Begin
Insert Into Venda_Itens
(Data, Numero_Venda, Codigo_Filial, Codigo_Serie, Codigo_Cliente,
Codigo_Produto , Numero_Item, Tipo_Venda_Troca, Codigo_Vendedor,
Situacao_Tributaria, Qtd, Valor_Unitario, Valor_Desconto, Percentual_Desconto,
Valor_Total, Base_ICMS, Base_Substituicao, Valor_Aliquota,
Valor_Ipi, Valor_Comissao, Custo_Compra ,
Imposto_Federal, Imposto_Estadual,
Imposto_Municipal, Custo_Operacional, Custo_Comissao,
Custo_Encargos, Custo1, Custo2, Custo3, Custo4, Custo5, Custo6)
Select :sData, :iNumero, :iFilial, :iSerie, :iCliente,
Codigo_Produto_Cliente, Num_Item, Tipo_Item ,Codigo_Vendedor,
Tributacao, Qtd, Valor_Unitario, Valor_Desconto, Percentual_Desconto,
Valor_Total, Valor_Base_ICMS, Valor_Base_Substituicao, Valor_Aliquota,
Valor_Ipi, Valor_Comissao, Valor_Custo,
(Valor_Total * Imposto_Federal)/100 , (Valor_Total * Imposto_Estadual)/100,
(Valor_Total * Imposto_Municipal)/100 , (Valor_Total * Custo_Operacional)/100,
(Valor_Total * Custo_Comissao)/100, (Valor_Total * Custo_Encargos)/100,
(Valor_Total * Percentual_Custo1)/100 , (Valor_Total * Percentual_Custo2)/100,
(Valor_Total * Percentual_Custo3)/100 , (Valor_Total * Percentual_Custo4)/100,
(Valor_Total * Percentual_Custo5)/100 , (Valor_Total * Percentual_Custo6)/100
From Orcamento_Tmp, Parametro Where Usuario = :sUsuario And Orcamento_Tmp.Tipo_Item <> ´C´;

Insert Into Venda_Itens_Grade
(Numero_Venda, Codigo_Filial , Codigo_Serie, Codigo_Produto,
Codigo_Grade, Data, Tipo_Venda_Troca, Numero_Item, Qtd)
Select :iNumero, :iFilial, :iSerie, Codigo_Produto,
Codigo_Grade, :sData, Tipo_Item , 0, Qtd
From Orcamento_Grade_Tmp Where Usuario = :sUsuario;
End
Else
Begin
Insert Into Venda_Itens
(Data, Numero_Venda, Codigo_Filial, Codigo_Serie, Codigo_Cliente,
Codigo_Produto, Numero_Item, Tipo_Venda_Troca, Codigo_Vendedor,
Situacao_Tributaria, Qtd, Valor_Unitario, Valor_Desconto, Percentual_Desconto,
Valor_Total, Base_ICMS, Base_Substituicao, Valor_Aliquota,
Valor_Ipi, Valor_Comissao, Custo_Compra ,
Imposto_Federal, Imposto_Estadual,
Imposto_Municipal, Custo_Operacional, Custo_Comissao,
Custo_Encargos, Custo1, Custo2, Custo3, Custo4, Custo5, Custo6)
Select :sData, :iNumero, :iFilial, :iSerie, :iCliente,
Codigo_Produto, Num_Item, Tipo_Item ,Codigo_Vendedor,
Tributacao, Qtd, Valor_Unitario, Valor_Desconto, Percentual_Desconto,
Valor_Total, Valor_Base_ICMS, Valor_Base_Substituicao, Valor_Aliquota,
Valor_Ipi, Valor_Comissao, Valor_Custo,
(Valor_Total * Imposto_Federal)/100 , (Valor_Total * Imposto_Estadual)/100,
(Valor_Total * Imposto_Municipal)/100 , (Valor_Total * Custo_Operacional)/100,
(Valor_Total * Custo_Comissao)/100, (Valor_Total * Custo_Encargos)/100,
(Valor_Total * Percentual_Custo1)/100 , (Valor_Total * Percentual_Custo2)/100,
(Valor_Total * Percentual_Custo3)/100 , (Valor_Total * Percentual_Custo4)/100,
(Valor_Total * Percentual_Custo5)/100 , (Valor_Total * Percentual_Custo6)/100
From Orcamento_Tmp, Parametro Where Usuario = :sUsuario And Orcamento_Tmp.Tipo_Item <> ´C´;

Insert Into Venda_Itens_Grade
(Numero_Venda, Codigo_Filial , Codigo_Serie, Codigo_Produto,
Codigo_Grade, Data, Tipo_Venda_Troca, Numero_Item, Qtd)
Select :iNumero, :iFilial, :iSerie, Codigo_Produto,
Codigo_Grade, :sData, Tipo_Item , 0, Qtd
From Orcamento_Grade_Tmp Where Usuario = :sUsuario;
End
End ^
Set Term ^ ;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Procedure GravaDados(bVendaNova, bVendaCancelada, bBaixaEstoque:Boolean) ;
Var
sFile, sNumCupom, sConTmp : String ;
tTmpVenda : textfile ;

rDin, rChe, rPre, rCar, rCre, rTic, rVal, rTotal, rTroco : Real ;
rDesc , rAcre, rComissao, rDescRateado : Real ;
iFilial, iCliente, iCartao, iTicket, iConta, iNumParcela, iContParcela : Integer ;
sFilial ,sSerie ,sNumero, sData, sVendedor, sCodCli, sCodCartao : String ;

// Novo
iQtdVendedor, iQtdItens, iVendedor, iTotItens, iNumeroVenda, iSerie : Integer ;
iContaTitulo, iContaParcela, iContaDivisaoImposto :Integer ;

asCodigo: array[1..1000] Of String ;
asCodigoCliente : array[1..1000] Of String ;
asDescricao : array[1..1000] Of String ;
arUnitario : array[1..1000] Of Real;
arQtd : array[1..1000] Of Real;
arDesconto : array[1..1000] Of Real;
arTotal : array[1..1000] Of Real;
aiCodVendedor : Array[1..10] Of Integer ;
arPerComissao : Array[1..10] Of Real ;
arComVendedor : Array[1..10] Of Real ;

rCustoProduto, rDesconto, rRateioComissao, rPercDesconto, rPercAcrescimo : Real ;
rComissaoCartao : Real ;

rValor_Base_ICMS, rValor_ICMS, rValor_Base_ISS,
rValor_ISS, rValor_Base_IPI, rValor_IPI, rValor_Base_Substituicao,
rValor_Substituicao, rValor_Base_IRRF, rValor_IRRF : Real;
sTsDiversos, sTsData, sTsValor : tStringList ;
Begin
Try
sTsData := tStringList.Create ;
sTsValor := tStringList.Create ;
sTsDiversos := tStringList.Create ;

iContaParcela := 0 ;
For iContaParcela := 0 To 11 Do
Begin
sTsData.Add(´´);
sTsValor.Add(´´);
sTsDiversos.Add(´´);
End;

// Carrega Todos os ítens de Venda
rDin:=0; rChe:=0; rPre:=0; rCar:=0; rCre:=0; rTic:=0; rVal:=0;
rDesc:= 0 ; rAcre:= 0 ; rTroco := 0 ;
iCartao := 0 ; iConta := 0 ;
rPercDesconto := 0; rDescRateado := 0 ;
rPercAcrescimo:= 0;
iContaTitulo := 0 ;
rComissaoCartao := 0 ;
rTotal := 0 ;
sNumCupom := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Cupom´,´´) ;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´CodigoCliente´,´´) <> ´´ Then
Begin
iCliente := StrToInt(strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´CodigoCliente´,´´));
End
Else
Begin
iCliente := 1 ;
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´CodigoCartao´,´´) <> ´´ Then
Begin
iCartao := StrToInt(strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´CodigoCartao´,´´))
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´CodigoTicket´,´´) <> ´´ Then
Begin
iTicket := StrToInt(strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´CodigoTicket´,´´))
End;

sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´TotalCupom´,´´) ;
rTotal := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;

sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Troco´,´´);
rTroco := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Desconto´,´´) <> ´´ Then
Begin
sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Desconto´,´´) ;
rDesc := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Acrescimo´,´´) <> ´´ Then
Begin
sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Acrescimo´,´´) ;
rAcre := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Dinheiro´,´´) <> ´´ Then
Begin
sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Dinheiro´,´´) ;
rDin := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Cheque´,´´) <> ´´ Then
Begin
sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Cheque´,´´) ;
rChe := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Cheque-pre´,´´) <> ´´ Then
Begin
sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Cheque-pre´,´´) ;
rPre := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Cartao´,´´) <> ´´ Then
Begin
sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Cartao´,´´) ;
rCar := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Crediario´,´´) <> ´´ Then
Begin
sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Crediario´,´´) ;
rCre := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Ticket´,´´) <> ´´ Then
Begin
sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Ticket´,´´) ;
rTic := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Vale´,´´) <> ´´ Then
Begin
sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Vale´,´´) ;
rVal := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;
End;

rValor_Base_ICMS := 0;
rValor_ICMS := 0;
rValor_Base_ISS := 0;
rValor_ISS := 0;
rValor_Base_IPI := 0;
rValor_IPI := 0;
rValor_Base_Substituicao := 0;
rValor_Substituicao := 0;
rValor_Base_IRRF := 0;
rValor_IRRF := 0;
rComissao := 0 ;
rCustoProduto := 0 ;
rRateioComissao := 0 ;

VisualizaDados(dsTab.IBQAuxiliar, False) ;
VisualizaDados(dsTab.IBQConfgECF, False) ;
VisualizaDados(dsTab.IBQAdcional, False) ;
VisualizaDados(dsTab.IBQVendaTotal, False) ;
VisualizaDados(dsTab.IBQVendaImpostos, False) ;
VisualizaDados(dsTab.IBQVendaComissao, False) ;
VisualizaDados(dsTab.IBQuery, False) ;
VisualizaDados(dsTab.IBQVendaFechamento, False) ;
VisualizaDados(dsTab.IBQTitulo, False) ;

// Soma todos os Valores
// Vendedor
iQtdVendedor := 1 ;
iQtdItens := 0 ;
If (gsAutomacao = ´SAGE´) Or
(gsAutomacao = ´CHACAL-OFF´) Then
Begin
If gbVendedor_ECF Then
Begin
ConsultaFavorecidoGeral(dsTab.IBQTmpPedCliCODIGO_VENDEDOR.AsInteger);
aiCodVendedor[iQtdVendedor] := dsTab.IBQTmpPedCliCODIGO_VENDEDOR.AsInteger ;
arPerComissao[iQtdVendedor] := dsTab.IBQClienteCOMISSAO.AsFloat ;
arComVendedor[iQtdVendedor] := 0 ;
iVendedor := aiCodVendedor[iQtdVendedor] ;
End
Else
Begin
aiCodVendedor[iQtdVendedor] := 1 ;
arPerComissao[iQtdVendedor] := 0 ;
arComVendedor[iQtdVendedor] := 0 ;
iVendedor := 1 ;
End;
End
Else
Begin
If gbVendedor_ECF Then
Begin
ConsultaFavorecidoGeral(dsTab.IBQTmpPedCliCODIGO_VENDEDOR.AsInteger);
aiCodVendedor[iQtdVendedor] := dsTab.IBQTmpPedCliCODIGO_VENDEDOR.AsInteger ;
arPerComissao[iQtdVendedor] := dsTab.IBQClienteCOMISSAO.AsFloat ;
arComVendedor[iQtdVendedor] := 0 ;
iVendedor := aiCodVendedor[iQtdVendedor] ;
End
Else
Begin
aiCodVendedor[iQtdVendedor] := 1 ;
arPerComissao[iQtdVendedor] := 0 ;
arComVendedor[iQtdVendedor] := 0 ;
iVendedor := 1 ;
End;
End;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Desconto´,´´) <> ´´ Then
Begin
sConTmp := strLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Desconto´,´´) ;
rDesc := StrToFloat(StrBuscaTroca(sConTmp,´,´,´´)) ;
End;

iTotItens := dsTab.IBQTmpPedCli.RecordCount ;

If Not dsTab.IBQTmpPedCli.Active Then
Begin
dsTab.IBQTmpPedCli.Close ;
dsTab.IBQTmpPedCli.SQL.Clear ;
dsTab.IBQTmpPedCli.SQL.Add(´Select * from Orcamento_Tmp´);
dsTab.IBQTmpPedCli.SQL.Add(´Where Usuario = :Usuario And Orcamento_Tmp.Tipo_Item = ´´V´´´) ;
dsTab.IBQTmpPedCli.SQL.Add(´Order By Num_Item ´);
dsTab.IBQTmpPedCli.ParamByName(´Usuario´).AsString := gsChaveUsuario ;
dsTab.IBQTmpPedCli.Open ;
End;

dsTab.IBQTmpPedCli.First ;
rDesconto := 0 ;
While Not dsTab.IBQTmpPedCli.Eof Do
Begin
If dsTab.IBQTmpPedCliTIPO_ITEM.AsString = ´V´ Then
Begin
Inc(iQtdItens) ;
ConsultaCodigoPadrao(dsTab.IBQTmpPedCliCODIGO_PRODUTO.AsString) ;
rCustoProduto := dsTab.IBQRetProduto.FieldByName(´Custo_Produto´).AsInteger ;
rDesconto := rDesconto + dsTab.IBQTmpPedCliVALOR_DESCONTO.AsFloat ;

// Verifica Comissao de Vendedores
If (iVendedor <> dsTab.IBQTmpPedCliCODIGO_VENDEDOR.AsInteger) Then
Begin
iConta := 0 ;
For iConta := 1 To 10 Do
Begin
If dsTab.IBQTmpPedCliCODIGO_VENDEDOR.AsInteger = aiCodVendedor[iConta] Then
Begin
iQtdVendedor := iConta;
Break ;
end;
End;

If iConta = 11 Then
Begin
iConta := 0 ;
For iConta := 1 To 10 Do
Begin
If aiCodVendedor[iConta] = 0 Then
Begin
iQtdVendedor := iConta ;
ConsultaVendedor(dsTab.IBQTmpPedCliCODIGO_VENDEDOR.AsInteger);
aiCodVendedor[iQtdVendedor] := dsTab.IBQTmpPedCliCODIGO_VENDEDOR.AsInteger ;
arPerComissao[iQtdVendedor] := dsTab.IBQClienteCOMISSAO.AsFloat ;
arComVendedor[iQtdVendedor] := 0 ;
iVendedor := aiCodVendedor[iQtdVendedor] ;
Break;
End;
End;
End;
End;

If arPerComissao[iQtdVendedor] <> 0 Then
Begin
If (dsTab.IBQRetProduto.FieldByName(´Limite_Max_Comissao´).AsFloat <> 99.99) Then
Begin
If (dsTab.IBQRetProduto.FieldByName(´Limite_Max_Comissao´).AsFloat <> 0) And
(arPerComissao[iQtdVendedor] > dsTab.IBQRetProduto.FieldByName(´Limite_Max_Comissao´).AsFloat) Then
Begin
rRateioComissao := (dsTab.IBQTmpPedCliVALOR_TOTAL.AsFloat * rDesc) / 100 ;
arComVendedor[iQtdVendedor] := arComVendedor[iQtdVendedor] +
(((dsTab.IBQTmpPedCliVALOR_TOTAL.AsFloat - rRateioComissao) * dsTab.IBQRetProduto.FieldByName(´Limite_Max_Comissao´).AsFloat) /100) ;
rComissao := (((dsTab.IBQTmpPedCliVALOR_TOTAL.AsFloat - rRateioComissao) * dsTab.IBQRetProduto.FieldByName(´Limite_Max_Comissao´).AsFloat) /100) ;
End
Else
Begin
rRateioComissao := (dsTab.IBQTmpPedCliVALOR_TOTAL.AsFloat * rDesc) / 100 ;
arComVendedor[iQtdVendedor] := arComVendedor[iQtdVendedor] +
(((dsTab.IBQTmpPedCliVALOR_TOTAL.AsFloat - rRateioComissao) * arPerComissao[iQtdVendedor]) /100) ;
rComissao := (((dsTab.IBQTmpPedCliVALOR_TOTAL.AsFloat - rRateioComissao) * arPerComissao[iQtdVendedor]) /100) ;
End;
End;
End;

Calcula_Impostos_Venda(dsTab.IBQTmpPedCliVALOR_TOTAL.AsFloat);
dsTab.IBQTmpPedCli.Edit ;
dsTab.IBQTmpPedCliNUM_ITEM.AsInteger := iQtdItens ;
dsTab.IBQTmpPedCliVALOR_BASE_ICMS.AsFloat := grPuValor_Base_ICMS ;
dsTab.IBQTmpPedCliVALOR_ICMS.AsFloat := grPuValor_ICMS ;
dsTab.IBQTmpPedCliVALOR_BASE_ISS.AsFloat := grPuValor_Base_ISS ;
dsTab.IBQTmpPedCliVALOR_ISS.AsFloat := grPuValor_ISS ;
dsTab.IBQTmpPedCliVALOR_BASE_IPI.AsFloat := grPuValor_Base_IPI ;
dsTab.IBQTmpPedCliVALOR_IPI.AsFloat := grPuValor_IPI ;
dsTab.IBQTmpPedCliVALOR_BASE_SUBSTITUICAO.AsFloat := grPuValor_Base_Substituicao ;
dsTab.IBQTmpPedCliVALOR_SUBSTITUICAO.AsFloat := grPuValor_Substituicao ;
dsTab.IBQTmpPedCliVALOR_BASE_IRRF.AsFloat := grPuValor_Base_IRRF ;
dsTab.IBQTmpPedCliVALOR_IRRF.AsFloat := grPuValor_IRRF ;
dsTab.IBQTmpPedCliTRIBUTACAO.AsString := gsPuTributacao ;
dsTab.IBQTmpPedCliVALOR_ALIQUOTA.AsFloat := grPuValor_Aliquota ;
dsTab.IBQTmpPedCliTIPO_ITEM.AsString := ´V´;
dsTab.IBQTmpPedCliVALOR_COMISSAO.AsFloat := rComissao ;
dsTab.IBQTmpPedCliVALOR_CUSTO.AsFloat := rCustoProduto ;
dsTab.IBQTmpPedCli.Post ;

rValor_Base_ICMS := rValor_Base_ICMS + dsTab.IBQTmpPedCliVALOR_BASE_ICMS.AsFloat ;
rValor_ICMS := rValor_ICMS + dsTab.IBQTmpPedCliVALOR_ICMS.AsFloat ;
rValor_Base_ISS := rValor_Base_ISS + dsTab.IBQTmpPedCliVALOR_BASE_ISS.AsFloat ;
rValor_ISS := rValor_ISS + dsTab.IBQTmpPedCliVALOR_ISS.AsFloat ;
rValor_Base_IPI := rValor_Base_IPI + dsTab.IBQTmpPedCliVALOR_BASE_IPI.AsFloat ;
rValor_IPI := rValor_IPI + dsTab.IBQTmpPedCliVALOR_IPI.AsFloat ;
rValor_Base_Substituicao := rValor_Base_Substituicao + dsTab.IBQTmpPedCliVALOR_BASE_SUBSTITUICAO.AsFloat ;
rValor_Substituicao := rValor_Substituicao + dsTab.IBQTmpPedCliVALOR_SUBSTITUICAO.AsFloat ;
rValor_Base_IRRF := rValor_Base_IRRF + dsTab.IBQTmpPedCliVALOR_BASE_IRRF.AsFloat ;
rValor_IRRF := rValor_IRRF + dsTab.IBQTmpPedCliVALOR_IRRF.AsFloat;
End;
dsTab.IBQTmpPedCli.Next ;
End;

// Incrementa Número da Série
If (gsAutomacao = ´CHACAL-ON´) Then
Begin
dsTab.IBQAuxiliar.Close ;
dsTab.IBQAuxiliar.SQL.Clear ;
dsTab.IBQAuxiliar.SQL.Add(´Select * From Serie´) ;
dsTab.IBQAuxiliar.SQL.Add(´Where NomeSerie = :NomeSerie And Codigo_Filial = :Filial´);
dsTab.IBQAuxiliar.ParamByName(´NomeSerie´).AsString := StrPreencheZero(giNumeroECFPadrao,3,0) ;
dsTab.IBQAuxiliar.ParamByName(´Filial´).AsInteger := giFilial ;
dsTab.IBQAuxiliar.Open ;
If dsTab.IBQAuxiliar.IsEmpty Then
Begin
dsTab.IBQAuxiliar.Close ;
dsTab.IBQAuxiliar.SQL.Clear ;
dsTab.IBQAuxiliar.SQL.Add(´Insert Into Serie´) ;
dsTab.IBQAuxiliar.SQL.Add(´(Codigo_Serie, Codigo_Filial, Modelo, NomeSerie, Tipo_Impressao,Contador)´);
dsTab.IBQAuxiliar.SQL.Add(´Values (:Codigo, :Codigo_Filial, :Modelo, :NomeSerie, :Tipo_Impressao, :Contador)´) ;
dsTab.IBQAuxiliar.ParamByName(´Codigo_Filial´).AsInteger := giFilial ;
dsTab.IBQAuxiliar.ParamByName(´Modelo´).AsString := ´ ´ ;
dsTab.IBQAuxiliar.ParamByName(´NomeSerie´).AsString := StrPreencheZero(giNumeroECFPadrao,3,0) ;
dsTab.IBQAuxiliar.ParamByName(´Contador´).AsInteger := 0 ;
dsTab.IBQAuxiliar.ParamByName(´Tipo_Impressao´).AsString := ´EC´ ;
dsTab.IBQAuxiliar.ExecSQL ;
end;

dsTab.IBQAuxiliar.Close ;
dsTab.IBQAuxiliar.SQL.Clear ;
dsTab.IBQAuxiliar.SQL.Add(´Update Serie Set Contador = Contador + 1´);
dsTab.IBQAuxiliar.SQL.Add(´Where NomeSerie = :NomeSerie And Codigo_Filial = :Filial´);
dsTab.IBQAuxiliar.ParamByName(´NomeSerie´).AsString := StrPreencheZero(giNumeroECFPadrao,3,0) ;
dsTab.IBQAuxiliar.ParamByName(´Filial´).AsInteger := giFilial ;
dsTab.IBQAuxiliar.ExecSQL ;

// Retorna Número da Série
dsTab.IBQAuxiliar.Close ;
dsTab.IBQAuxiliar.SQL.Clear ;
dsTab.IBQAuxiliar.SQL.Add(´Select * From Serie´);
dsTab.IBQAuxiliar.SQL.Add(´Where NomeSerie = :NomeSerie And Codigo_Filial = :Filial´);
dsTab.IBQAuxiliar.ParamByName(´Filial´).AsInteger := giFilial ;
dsTab.IBQAuxiliar.ParamByName(´NomeSerie´).AsString := StrPreencheZero(giNumeroECFPadrao,3,0) ;
dsTab.IBQAuxiliar.Open ;

iNumeroVenda := dsTab.IBQAuxiliar.FieldByName(´Contador´).AsInteger ;
iSerie := dsTab.IBQAuxiliar.FieldByName(´Codigo_Serie´).AsInteger ;
iFilial := dsTab.IBQAuxiliar.FieldByName(´Codigo_Filial´).AsInteger ;
End
Else
Begin
dsTab.IBQConfgECF.Close ;
dsTab.IBQConfgECF.SQL.Clear ;
dsTab.IBQConfgECF.SQL.Add(´Select * From Configura_ECFS Where Numero_ECF = :Codigo_ECF´) ;
dsTab.IBQConfgECF.ParamByName(´Codigo_ECF´).AsInteger := giNumeroECFPadrao ;
dsTab.IBQConfgECF.Open ;

iNumeroVenda := dsTab.IBQConfgECFNUMERO_VENDA.AsInteger + 1;
iSerie := giNumeroECFPadrao ;
iFilial := giFilial ;
End;

dsTab.IBQConfgECF.Close ;
dsTab.IBQConfgECF.SQL.Clear ;
dsTab.IBQConfgECF.SQL.Add(´Update Configura_ECFS´) ;
dsTab.IBQConfgECF.SQL.Add(´ Set Numero_Venda = :Numero_Venda´);
dsTab.IBQConfgECF.SQL.Add(´Where Numero_ECF = :Numero_ECF´);
dsTab.IBQConfgECF.ParamByName(´Numero_ECF´).AsInteger := giNumeroECFPadrao ;
dsTab.IBQConfgECF.ParamByName(´Numero_Venda´).AsInteger := iNumeroVenda ;
dsTab.IBQConfgECF.ExecSQL ;

If strLerIni(gsDiretorioECF+´\Venda.Txt´,´StatusECF´,´Nsu´,´´) <> ´´ Then
Begin
dsTab.IBQAdcional.Close ;
dsTab.IBQAdcional.SQL.Clear ;
dsTab.IBQAdcional.SQL.Add(´Insert Into Venda_Adicional´) ;
dsTab.IBQAdcional.SQL.Add(´(R_E_D_E, N_S_U, F_I_N_A_L)´) ;
dsTab.IBQAdcional.SQL.Add(´ Values (:R_E_D_E, :N_S_U, :F_I_N_A_L)´) ;
dsTab.IBQAdcional.ParamByName(´N_S_U´).AsString := strLerIni(gsDiretorioECF+´\Venda.Txt´,´StatusECF´,´Nsu´,´´) ;
dsTab.IBQAdcional.ParamByName(´R_E_D_E´).AsString := strLerIni(gsDiretorioECF+´\Venda.Txt´,´StatusECF´,´Rede´,´´) ;
dsTab.IBQAdcional.ParamByName(´F_I_N_A_L´).AsString := strLerIni(gsDiretorioECF+´\Venda.Txt´,´StatusECF´,´Final´,´´) ;
dsTab.IBQAdcional.ExecSQL ;
End;

If gsAutomacao = ´CHACAL-ON´ Then
Begin
dsTab.IBTransChacal.CommitRetaining ;
dsTab.IBTransChacal.Active := False ;
dsTab.IBTransChacal.StartTransaction ;
dsTab.IBTransChacal.Active := True ;
end
Else
Begin
dsTab.IBTransECF.CommitRetaining ;
dsTab.IBTransECF.Active := False ;
dsTab.IBTransECF.StartTransaction ;
dsTab.IBTransECF.Active := True ;
End;

If Not bVendaCancelada Then
Begin
rPercDesconto := (rDesc * 100) / (rTotal) ;
rPercAcrescimo := (rAcre * 100) / (rTotal) ;
End;

dsTab.IBQVendaTotal.Close ;
dsTab.IBQVendaTotal.SQL.Clear ;
dsTab.IBQVendaTotal.SQL.Add(´Insert Into Venda_Total´) ;
dsTab.IBQVendaTotal.SQL.Add(´(Numero_Venda, Codigo_Filial, Codigo_Serie, Codigo_Cliente, Cupom_Fiscal,´+
´ Codigo_Usuario, Data, Situacao, Valor_Total, Valor_Liquido, Valor_Troca,´+
´ Valor_Desconto, Percentual_Desconto, Valor_Acrescimo, Percentual_Acrescimo,´+
´ Pago_Dinheiro, Pago_Cartao, Pago_Cheque, Pago_Cheque_Pre, Pago_Crediario,´+
´ Pago_Ticket, Pago_Faturada, Pago_Convenio, Pago_Outros, Obs, Flag)´);

dsTab.IBQVendaTotal.SQL.Add(´Values´+
´(:Numero_Venda, :Codigo_Filial, :Codigo_Serie, :Codigo_Cliente, :Cupom_Fiscal,´+
´ :Codigo_Usuario, :Data, :Situacao, :Valor_Total, :Valor_Liquido, :Valor_Troca,´+
´ :Valor_Desconto, :Percentual_Desconto, :Valor_Acrescimo, :Percentual_Acrescimo,´+
´ :Pago_Dinheiro, :Pago_Cartao, :Pago_Cheque, :Pago_Cheque_Pre, :Pago_Crediario,´+
´ :Pago_Ticket, :Pago_Faturada, :Pago_Convenio, :Pago_Outros, :Obs, :Flag)´);
// Linha Colocado por causa do SAGE
If iCliente = 0 Then iCliente := 1 ;

dsTab.IBQVendaTotal.ParamByName(´Numero_Venda´).AsInteger := iNumeroVenda ;
dsTab.IBQVendaTotal.ParamByName(´Codigo_Filial´).AsInteger := iFilial ;
dsTab.IBQVendaTotal.ParamByName(´Codigo_Serie´).AsInteger := iSerie ;
dsTab.IBQVendaTotal.ParamByName(´Codigo_Cliente´).AsInteger := iCliente ;
dsTab.IBQVendaTotal.ParamByName(´Cupom_Fiscal´).AsInteger := StrToInt(sNumCupom);
dsTab.IBQVendaTotal.ParamByName(´Codigo_Usuario´).AsInteger := giOperadorVenda ;
dsTab.IBQVendaTotal.ParamByName(´Data´).AsString := DateToStr(Date) ;
If bVendaCancelada Then
dsTab.IBQVendaTotal.ParamByName(´Situacao´).AsString := ´C´
Else
dsTab.IBQVendaTotal.ParamByName(´Situacao´).AsString := ´E´ ;
dsTab.IBQVendaTotal.ParamByName(´Valor_Total´).AsFloat := rTotal ;
dsTab.IBQVendaTotal.ParamByName(´Valor_Liquido´).AsFloat := (rTotal - rDesc) + rAcre ;
dsTab.IBQVendaTotal.ParamByName(´Valor_Troca´).AsFloat := 0 ;
dsTab.IBQVendaTotal.ParamByName(´Valor_Desconto´).AsFloat := rDesc ;
dsTab.IBQVendaTotal.ParamByName(´Percentual_Desconto´).AsFloat := rPercDesconto ;
dsTab.IBQVendaTotal.ParamByName(´Valor_Acrescimo´).AsFloat := rAcre ;
dsTab.IBQVendaTotal.ParamByName(´Percentual_Acrescimo´).AsFloat := rPercAcrescimo ;
dsTab.IBQVendaTotal.ParamByName(´Pago_Dinheiro´).AsFloat := rDin - rTroco ;
dsTab.IBQVendaTotal.ParamByName(´Pago_Cartao´).AsFloat := rCar ;
dsTab.IBQVendaTotal.ParamByName(´Pago_Cheque´).AsFloat := rChe ;
dsTab.IBQVendaTotal.ParamByName(´Pago_Cheque_Pre´).AsFloat := rPre ;
dsTab.IBQVendaTotal.ParamByName(´Pago_Crediario´).AsFloat := rCre ;
dsTab.IBQVendaTotal.ParamByName(´Pago_Ticket´).AsFloat := rTic ;
dsTab.IBQVendaTotal.ParamByName(´Pago_Faturada´).AsFloat := 0 ;
dsTab.IBQVendaTotal.ParamByName(´Pago_Convenio´).AsFloat := 0 ;
dsTab.IBQVendaTotal.ParamByName(´Pago_Outros´).AsFloat := rVal ;
dsTab.IBQVendaTotal.ParamByName(´Obs´).AsString := ´´ ;
If frVendaECF.bPuPedidoVenda Then
dsTab.IBQVendaTotal.ParamByName(´Flag´).AsString := ´T´
Else
dsTab.IBQVendaTotal.ParamByName(´Flag´).AsString := ´ ´ ;
dsTab.IBQVendaTotal.ExecSQL ;

If (gsAutomacao = ´CHACAL-ON´) Or
(gsAutomacao = ´CHACAL-OFF´) Then
Begin
// Grava Valor dos impostos
dsTab.IBQVendaImpostos.Close ;
dsTab.IBQVendaImpostos.SQL.Clear ;
dsTab.IBQVendaImpostos.SQL.Add(´Insert Into Venda_Impostos´) ;
dsTab.IBQVendaImpostos.SQL.Add(´(Numero_Venda, Codigo_Filial, Codigo_Serie, Codigo_Cliente, Data,´+
´Codigo_Cfop, Valor_ICMS, Valor_Base_ICMS, Valor_Substituicao, Valor_Base_Substituicao,´+
´Valor_ISS, Valor_Base_ISS, Valor_IPI, Valor_Base_IPI, Valor_IRRF, Valor_Base_IRRF)´);
dsTab.IBQVendaImpostos.SQL.Add(´Values (:Numero_Venda, :Codigo_Filial, :Codigo_Serie, :Codigo_Cliente, :Data,´+
´:Codigo_Cfop, :Valor_ICMS, :Valor_Base_ICMS, :Valor_Substituicao, :Valor_Base_Substituicao,´+
´:Valor_ISS, :Valor_Base_ISS, :Valor_IPI, :Valor_Base_IPI, :Valor_IRRF, :Valor_Base_IRRF)´);
dsTab.IBQVendaImpostos.ParamByName(´Numero_Venda´).AsInteger := iNumeroVenda ;
dsTab.IBQVendaImpostos.ParamByName(´Codigo_Filial´).AsInteger := iFilial ;
dsTab.IBQVendaImpostos.ParamByName(´Codigo_Serie´).AsInteger := iSerie ;
dsTab.IBQVendaImpostos.ParamByName(´Codigo_Cliente´).AsInteger := iCliente ;
dsTab.IBQVendaImpostos.ParamByName(´Codigo_Cfop´).AsInteger := 1 ;
dsTab.IBQVendaImpostos.ParamByName(´Data´).AsString := DateToStr(Date) ;
dsTab.IBQVendaImpostos.ParamByName(´Valor_ICMS´).AsFloat := rValor_ICMS ;
dsTab.IBQVendaImpostos.ParamByName(´Valor_Base_ICMS´).AsFloat := rValor_Base_ICMS ;
dsTab.IBQVendaImpostos.ParamByName(´Valor_Substituicao´).AsFloat := rValor_Substituicao ;
dsTab.IBQVendaImpostos.ParamByName(´Valor_Base_Substituicao´).AsFloat := rValor_Base_Substituicao ;
dsTab.IBQVendaImpostos.ParamByName(´Valor_ISS´).AsFloat := rValor_ISS ;
dsTab.IBQVendaImpostos.ParamByName(´Valor_Base_ISS´).AsFloat := rValor_Base_ISS ;
dsTab.IBQVendaImpostos.ParamByName(´Valor_IPI´).AsFloat := rValor_IPI ;
dsTab.IBQVendaImpostos.ParamByName(´Valor_Base_IPI´).AsFloat := rValor_Base_IPI ;
dsTab.IBQVendaImpostos.ParamByName(´Valor_IRRF´).AsFloat := rValor_IRRF ;
dsTab.IBQVendaImpostos.ParamByName(´Valor_Base_IRRF´).AsFloat := rValor_Base_IRRF ;
dsTab.IBQVendaImpostos.ExecSQL ;
End;

// Grava Comissao de Vendedor
// Verificar a necessidade de gravar com Save ou Mascate
If Not bVendaCancelada Then
Begin
If Not frVendaECF.bPuPedidoVenda Then
Begin
iConta := 0 ;
For iConta := 1 To 10 Do
Begin
If aiCodVendedor[iConta] <> 0 Then
Begin
dsTab.IBQVendaComissao.Close ;
dsTab.IBQVendaComissao.SQL.Clear ;
dsTab.IBQVendaComissao.SQL.Add(´Insert Into Venda_Comissao´) ;
dsTab.IBQVendaComissao.SQL.Add(´(Numero_Venda, Codigo_Filial, Data,´+
´Codigo_Serie, Codigo_Vendedor, Valor_Comissao)´);
dsTab.IBQVendaComissao.SQL.Add(´Values (:Numero_Venda, :Codigo_Filial, :Data,´+
´:Codigo_Serie, :Codigo_Vendedor, :Valor_Comissao)´);
dsTab.IBQVendaComissao.ParamByName(´Numero_Venda´).AsInteger := iNumeroVenda ;
dsTab.IBQVendaComissao.ParamByName(´Codigo_Filial´).AsInteger := iFilial ;
dsTab.IBQVendaComissao.ParamByName(´Codigo_Serie´).AsInteger := iSerie ;
dsTab.IBQVendaComissao.ParamByName(´Data´).AsString := DateToStr(Date) ;
dsTab.IBQVendaComissao.ParamByName(´Codigo_Vendedor´).AsInteger := aiCodVendedor[iConta];
dsTab.IBQVendaComissao.ParamByName(´Valor_Comissao´).AsFloat := arComVendedor[iConta];
dsTab.IBQVendaComissao.ExecSQL ;
End;
End;
End;
End;

// Grava os Itens
dsTab.IBQuery.Close ;
dsTab.IBQuery.SQL.Clear ;
If (gsAutomacao = ´CHACAL-ON´) Then
dsTab.IBQuery.SQL.Add(´Execute Procedure Proc_Grava_Venda_Itens(:sData, :iCliente, :iFilial, :iSerie, :iNumero, :sUsuario, :Flag)´)
Else
dsTab.IBQuery.SQL.Add(´Execute Procedure Proc_Grava_Venda_Itens(:sData, :iCliente, :iFilial, :iSerie, :iNumero, :sUsuario, :sAutomacao, :Flag )´);
erro aqui
dsTab.IBQuery.ParamByName(´iNumero´).AsInteger := iNumeroVenda ;
dsTab.IBQuery.ParamByName(´iFilial´).AsInteger := iFilial ;
dsTab.IBQuery.ParamByName(´iSerie´).AsInteger := iSerie ;
dsTab.IBQuery.ParamByName(´sData´).AsString := DateToStr(Date);
dsTab.IBQuery.ParamByName(´iCliente´).AsInteger := iCliente ;
dsTab.IBQuery.ParamByName(´sUsuario´).AsString := gsChaveUsuario ;
If (gsAutomacao <> ´CHACAL-ON´) Then
dsTab.IBQuery.ParamByName(´sAutomacao´).AsString := ´S´ ;

If frVendaECF.bPuPedidoVenda Then
dsTab.IBQuery.ParamByName(´Flag´).AsString := ´T ´
Else
dsTab.IBQuery.ParamByName(´Flag´).AsString := ´ ´ ;

dsTab.IBQuery.ExecSQL ;

If (gsAutomacao = ´CHACAL-ON´) And (Not bVendaCancelada) And (bBaixaEstoque) And (Not frVendaECF.bPuPedidoVenda) Then
Begin
// Grava Estoque
dsTab.IBQuery.Close ;
dsTab.IBQuery.SQL.Clear ;
dsTab.IBQuery.SQL.Add(´Execute Procedure Proc_Est_Venda_Itens(:Data, :Cliente, :Filial, :Serie, :Numero, :Usuario, :Destino, :)´);
dsTab.IBQuery.ParamByName(´Numero´).AsInteger := iNumeroVenda ;
dsTab.IBQuery.ParamByName(´Filial´).AsInteger := iFilial ;
dsTab.IBQuery.ParamByName(´Serie´).AsInteger := iSerie ;
dsTab.IBQuery.ParamByName(´Data´).AsString := DateToStr(Date) ;
dsTab.IBQuery.ParamByName(´Cliente´).AsInteger := iCliente ;
dsTab.IBQuery.ParamByName(´Usuario´).AsString := gsChaveUsuario ;
dsTab.IBQuery.ParamByName(´Destino´).AsString := ´L´ ;
dsTab.IBQuery.ExecSQL ;

// Grava Composicao se Na sáida
// Composicao
dsTab.IBQuery.Close ;
dsTab.IBQuery.SQL.Clear ;
dsTab.IBQuery.SQL.Add(´Execute Procedure Proc_Atu_Est_Composicao(:sData,´);
dsTab.IBQuery.SQL.Add(´:iCliente, :iFilial, :iSerie, :iNumero, :sDocumento,´);
dsTab.IBQuery.SQL.Add(´:Destino, :cOrigemProcesso, :rQtd, :sUsuario)´);

dsTab.IBQuery.ParamByName(´sData´).AsString := DateToStr(Date) ;
dsTab.IBQuery.ParamByName(´iCliente´).AsInteger := iCliente ;
dsTab.IBQuery.ParamByName(´iFilial´).AsInteger := iFilial ;
dsTab.IBQuery.ParamByName(´iSerie´).AsInteger := iSerie ;
dsTab.IBQuery.ParamByName(´iNumero´).AsInteger := iNumeroVenda ;
dsTab.IBQuery.ParamByName(´sDocumento´).AsString := ´Venda´ ;
dsTab.IBQuery.ParamByName(´cOrigemProcesso´).AsString := ´VENDA´ ;
dsTab.IBQuery.ParamByName(´rQtd´).AsFloat := 0 ;
dsTab.IBQuery.ParamByName(´sUsuario´).AsString := gsChaveUsuario ;
dsTab.IBQuery.ParamByName(´Destino´).AsString := ´L´ ;
dsTab.IBQuery.ExecSql ;
End;

// If Not frVendaECF.bPuPedidoVenda Then
// Grava ou não Grava o Pedido
If (Not bVendaCancelada) Then
Begin
If (Not frVendaECF.bPuPedidoVenda) Then
Begin
// Grava Total para Fechamento
dsTab.IBQVendaFechamento.Close ;
dsTab.IBQVendaFechamento.SQL.Clear ;
dsTab.IBQVendaFechamento.SQL.Add(´Update Venda_Fechamento´) ;
dsTab.IBQVendaFechamento.SQL.Add(´Set Pago_Dinheiro = Pago_Dinheiro + :Pago_Dinheiro, Pago_Cartao = Pago_Cartao + :Pago_Cartao,´);
dsTab.IBQVendaFechamento.SQL.Add(´Pago_Cheque = Pago_Cheque + :Pago_Cheque , Pago_Crediario = Pago_Crediario + :Pago_Crediario,´);
dsTab.IBQVendaFechamento.SQL.Add(´Pago_Ticket = Pago_Ticket + :Pago_Ticket , Pago_Faturada = Pago_Faturada + :Pago_Faturada,´);
dsTab.IBQVendaFechamento.SQL.Add(´Pago_Convenio = Pago_Convenio + :Pago_Convenio , Pago_Outros = Pago_Outros + :Pago_Outros,´);
dsTab.IBQVendaFechamento.SQL.Add(´Qtd_Vendas = Qtd_Vendas + :Qtd_Vendas´);
dsTab.IBQVendaFechamento.SQL.Add(´Where Codigo_Usuario = :Codigo_Usuario´);
dsTab.IBQVendaFechamento.SQL.Add(´ And Data_Movimento = :Data_Movimento´);
dsTab.IBQVendaFechamento.SQL.Add(´ And Codigo_Filial = :Codigo_Filial´);
dsTab.IBQVendaFechamento.SQL.Add(´ And Estado_Caixa = :Estado_Caixa ´);
dsTab.IBQVendaFechamento.SQL.Add(´ And ECF = ´+IntToStr(giNumeroECFPadrao));

dsTab.IBQVendaFechamento.ParamByName(´Codigo_Usuario´).AsInteger := giOperadorVenda ;
dsTab.IBQVendaFechamento.ParamByName(´Data_Movimento´).AsString := DateToStr(Date);
dsTab.IBQVendaFechamento.ParamByName(´Codigo_Filial´).AsInteger := iFilial ;
dsTab.IBQVendaFechamento.ParamByName(´Estado_Caixa´).AsString := ´A´ ;
dsTab.IBQVendaFechamento.ParamByName(´Pago_Dinheiro´).AsFloat := rDin - rTroco ;
dsTab.IBQVendaFechamento.ParamByName(´Pago_Cartao´).AsFloat := rCar ;
dsTab.IBQVendaFechamento.ParamByName(´Pago_Cheque´).AsFloat := rChe + rPre ;
dsTab.IBQVendaFechamento.ParamByName(´Pago_Crediario´).AsFloat := rCre ;
dsTab.IBQVendaFechamento.ParamByName(´Pago_Ticket´).AsFloat := rTic ;
dsTab.IBQVendaFechamento.ParamByName(´Pago_Faturada´).AsFloat := 0 ;
dsTab.IBQVendaFechamento.ParamByName(´Pago_Convenio´).AsFloat := 0;
dsTab.IBQVendaFechamento.ParamByName(´Pago_Outros´).AsFloat := rVal ;
dsTab.IBQVendaFechamento.ParamByName(´Qtd_Vendas´).AsInteger := 1 ;
dsTab.IBQVendaFechamento.ExecSQL ;
End;
End;

If (Not bVendaCancelada) Then
Begin
// Atualiza a Tabela Orcamento Tmp
dsTab.IBQuery.Close ;
dsTab.IBQuery.SQL.Clear ;
dsTab.IBQuery.SQL.Add(´Execute Procedure Atu_Orca_Tmp(:sUsuario, :sAutomacao, :sData)´);
If gsAutomacao = ´SAGE´ Then
dsTab.IBQuery.ParamByName(´sAutomacao´).AsString := ´S´
Else
dsTab.IBQuery.ParamByName(´sAutomacao´).AsString := ´N´ ;
dsTab.IBQuery.ParamByName(´sData´).AsDate := Date ;
dsTab.IBQuery.ParamByName(´sUsuario´).AsString := gsChaveUsuario ;
dsTab.IBQuery.ExecSQL ;

If gsAutomacao = ´SAGE´ Then
Begin
dsTab.IBQuery.Close ;
dsTab.IBQuery.SQL.Clear ;
dsTab.IBQuery.SQL.Add(´Select Produto.Tributacao , Orcamento_Tmp.Valor_Aliquota, Sum(Valor_Total) As Total´);
dsTab.IBQuery.SQL.Add(´From Orcamento_Tmp, Produto´);
dsTab.IBQuery.SQL.Add(´Where Usuario = :sUsuario´);
dsTab.IBQuery.SQL.Add(´ And Orcamento_Tmp.Codigo_Produto_Cliente = Produto.Codigo_Produto_Cliente And Orcamento_Tmp.Tipo_Item = ´´V´´´);
dsTab.IBQuery.SQL.Add(´Group by Produto.Tributacao, Orcamento_Tmp.Valor_Aliquota´);
End
Else
Begin
dsTab.IBQuery.Close ;
dsTab.IBQuery.SQL.Clear ;
dsTab.IBQuery.SQL.Add(´Select Produto.Tributacao , Orcamento_Tmp.Valor_Aliquota, Sum(Valor_Total) As Total´);
dsTab.IBQuery.SQL.Add(´From Orcamento_Tmp, Produto´);
dsTab.IBQuery.SQL.Add(´Where Usuario = :sUsuario´);
dsTab.IBQuery.SQL.Add(´ And Orcamento_Tmp.Codigo_Produto = Produto.Codigo_Produto And Orcamento_Tmp.Tipo_Item = ´´V´´´);
dsTab.IBQuery.SQL.Add(´Group by Produto.Tributacao, Orcamento_Tmp.Valor_Aliquota´);
End;
dsTab.IBQuery.ParamByName(´sUsuario´).AsString := gsChaveUsuario ;
dsTab.IBQuery.Open ;

If rDesc > 0 Then
Begin
iContaDivisaoImposto := 0 ;
While Not dsTab.IBQuery.Eof Do
Begin
Inc(iContaDivisaoImposto);
dsTab.IBQuery.Next;
End;
rDescRateado := rDesc / iContaDivisaoImposto ;
dsTab.IBQuery.First ;
End;

While Not dsTab.IBQuery.Eof Do
Begin
dsTab.IBQSin60a.Close ;
dsTab.IBQSin60a.SQL.Clear ;
dsTab.IBQSin60a.SQL.Add(´Execute Procedure Atu_Sin060a(:sData, :iEcf, :cTributacao, :rTotal, ´´+´´)´) ;
dsTab.IBQSin60a.ParamByName(´sData´).AsDate := Date;
dsTab.IBQSin60a.ParamByName(´iEcf´).AsInteger := giNumeroECFPadrao ;

If (dsTab.IBQuery.FieldByName(´Tributacao´).AsString = ´T´) Then
dsTab.IBQSin60a.ParamByName(´cTributacao´).AsString := StrPreencheZero(dsTab.IBQuery.FieldByName(´Valor_Aliquota´).asFloat,4,0);
If (dsTab.IBQuery.FieldByName(´Tributacao´).AsString = ´S´) Then
dsTab.IBQSin60a.ParamByName(´cTributacao´).AsString := ´ISS´ ;
If (dsTab.IBQuery.FieldByName(´Tributacao´).AsString = ´F´) Then
dsTab.IBQSin60a.ParamByName(´cTributacao´).AsString := dsTab.IBQuery.FieldByName(´Tributacao´).AsString ;
If (dsTab.IBQuery.FieldByName(´Tributacao´).AsString = ´N´) Then
dsTab.IBQSin60a.ParamByName(´cTributacao´).AsString := dsTab.IBQuery.FieldByName(´Tributacao´).AsString ;
If (dsTab.IBQuery.FieldByName(´Tributacao´).AsString = ´I´) Then
dsTab.IBQSin60a.ParamByName(´cTributacao´).AsString := dsTab.IBQuery.FieldByName(´Tributacao´).AsString ;

dsTab.IBQSin60a.ParamByName(´rTotal´).AsFloat := dsTab.IBQuery.FieldByName(´Total´).AsFloat - rDescRateado ;
dsTab.IBQSin60a.ExecSQL ;
dsTab.IBQuery.Next ;
End;
dsTab.IBQuery.Close ;
End
Else
Begin
dsTab.IBQSin60a.Close ;
dsTab.IBQSin60a.SQL.Clear ;
dsTab.IBQSin60a.SQL.Add(´Execute Procedure Atu_Sin060a(:sData, :iEcf, :cTributacao, :rTotal, ´´+´´)´) ;
dsTab.IBQSin60a.ParamByName(´sData´).AsDate := Date;
dsTab.IBQSin60a.ParamByName(´iEcf´).AsInteger := giNumeroECFPadrao ;
dsTab.IBQSin60a.ParamByName(´cTributacao´).AsString := ´CANC´ ;
dsTab.IBQSin60a.ParamByName(´rTotal´).AsFloat := (rTotal - rDesc) + rAcre ;
dsTab.IBQSin60a.ExecSQL ;
end;

// Ascrescimo Sintegra
If rDesc > 0 Then
Begin
dsTab.IBQSin60a.Close ;
dsTab.IBQSin60a.SQL.Clear ;
dsTab.IBQSin60a.SQL.Add(´Execute Procedure Atu_Sin060a(:sData, :iEcf, :cTributacao, :rTotal, ´´+´´)´) ;
dsTab.IBQSin60a.ParamByName(´sData´).AsDate := Date;
dsTab.IBQSin60a.ParamByName(´iEcf´).AsInteger := giNumeroECFPadrao ;
dsTab.IBQSin60a.ParamByName(´cTributacao´).AsString := ´DESC´ ;
dsTab.IBQSin60a.ParamByName(´rTotal´).AsFloat := rDesc ;
dsTab.IBQSin60a.ExecSQL ;
End;

If (Not bVendaCancelada) And (Not frVendaECF.bPuPedidoVenda) Then
Begin
If (rCar <> 0) And (gbFechaCartao) Then
Begin
iContaParcela := 0 ;
For iContaParcela := 0 To 11 Do
Begin
sTsData.Strings[iContaParcela] := ´´ ;
sTsValor.Strings[iContaParcela] := ´´ ;
sTsDiversos.Strings[iContaParcela] := ´´ ;
End;

iContaParcela := 0 ;
For iContaParcela := 0 To 11 Do
Begin
sTsData.Strings[iContaParcela] := StrLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Data_Car´+StrPreencheZero(iContaParcela+1,2,0),´´);
sTsValor.Strings[iContaParcela] := StrLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Valor_Car´+StrPreencheZero(iContaParcela+1,2,0),´´);
End;

ConsultaFavorecidoGeral(iCartao);
If dsTab.IBQClienteTIPO_CARTAO.AsString = ´P´ Then
GravaTituloCartao(iNumeroVenda, iSerie, iFilial, iContaTitulo, iCliente,
sTsData , sTsValor, dsTab.IBQClienteTAXA.AsFloat)
Else
GravaTituloCartao(iNumeroVenda, iSerie, iFilial, iContaTitulo, iCartao ,
sTsData , sTsValor, dsTab.IBQClienteTAXA.AsFloat) ;
// Grava Total de Vendas ndo Cartao
rComissaoCartao := rCar ;
rComissaoCartao := ((rComissaoCartao * dsTab.IBQClienteTAXA.AsFloat)/100);

dsTab.IBQVendaCartao.Close ;
dsTab.IBQVendaCartao.SQL.Clear ;
dsTab.IBQVendaCartao.SQL.Add(´Insert Into Venda_Cartao´) ;
dsTab.IBQVendaCartao.SQL.Add(´(Numero_Venda, Codigo_Filial, Data, ´+
´Codigo_Serie, Codigo_Cliente, Valor_Venda, Valor_Cartao)´);
dsTab.IBQVendaCartao.SQL.Add(´Values (:Numero_Venda, :Codigo_Filial, :Data,´+
´:Codigo_Serie, :Codigo_Cliente, :Valor_Venda, :Valor_Cartao)´);
dsTab.IBQVendaCartao.ParamByName(´Numero_Venda´).AsInteger := iNumeroVenda ;
dsTab.IBQVendaCartao.ParamByName(´Codigo_Filial´).AsInteger := iFilial ;
dsTab.IBQVendaCartao.ParamByName(´Codigo_Serie´).AsInteger := iSerie ;
dsTab.IBQVendaCartao.ParamByName(´Data´).AsString := DateToStr(Date) ;
dsTab.IBQVendaCartao.ParamByName(´Codigo_Cliente´).AsInteger := iCartao ;
dsTab.IBQVendaCartao.ParamByName(´Valor_Venda´).AsFloat := rCar ;
dsTab.IBQVendaCartao.ParamByName(´Valor_Cartao´).AsFloat := rComissaoCartao ;
dsTab.IBQVendaCartao.ExecSQL ;
End;

// Cheque
If (rChe <> 0) And gbFechaCheque Then
Begin
GravaTituloCheque(iNumeroVenda, iSerie, iFilial, iContaTitulo, iCliente, rChe);
End;

// Cheque - Pre
If (rPre <> 0) And gbFechaChequePre Then
Begin
iContaParcela := 0 ;
For iContaParcela := 0 To 11 Do
Begin
sTsData.Strings[iContaParcela] := ´´ ;
sTsValor.Strings[iContaParcela] := ´´ ;
sTsDiversos.Strings[iContaParcela] := ´´ ;
End;

iContaParcela := 0 ;
For iContaParcela := 0 To 11 Do
Begin
sTsDiversos.Strings[iContaParcela] := StrLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Numero_Pre´+StrPreencheZero(iContaParcela+1,2,0),´´);
sTsData.Strings[iContaParcela] := StrLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Data_Pre´+StrPreencheZero(iContaParcela+1,2,0),´´);
sTsValor.Strings[iContaParcela] := StrLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Valor_Pre´+StrPreencheZero(iContaParcela+1,2,0),´´);
End;

GravaTituloChequePre(iNumeroVenda, iSerie, iFilial, iContaTitulo,
iCliente, sTsData, sTsValor, sTsDiversos);
End;

If rCre > 0 Then
Begin
iContaParcela := 0 ;
For iContaParcela := 0 To 11 Do
Begin
sTsData.Strings[iContaParcela] := ´´ ;
sTsValor.Strings[iContaParcela] := ´´ ;
sTsDiversos.Strings[iContaParcela] := ´´ ;
End;

iContaParcela := 0 ;
For iContaParcela := 0 To 11 Do
Begin
sTsData.Strings[iContaParcela] := StrLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Data_Cre´+StrPreencheZero(iContaParcela+1,2,0),´´);
sTsValor.Strings[iContaParcela] := StrLerIni(gsDiretorioECF+´\Venda.Txt´,´FechaCupom´,´Valor_Cre´+StrPreencheZero(iContaParcela+1,2,0),´´);
End;

GravaTituloCrediario(iNumeroVenda, iSerie, iFilial, iContaTitulo, iCliente, sTsData, sTsValor );
End;

// Ticket
If (rTic <> 0) And gbFechaTicket Then
Begin
ConsultaFavorecidoGeral(iTicket);
GravaTituloTicket(iNumeroVenda, iSerie, iFilial, iContaTitulo,
iTicket, rTic,
dsTab.IBQClienteTAXA.AsFloat, dsTab.IBQClienteDIAS_PAGAMENTO.AsInteger );
End;
End;

If gsAutomacao = ´CHACAL-ON´ Then
dsTab.IBTransChacal.Commit
Else
dsTab.IBTransECF.Commit ;

sTsData.Free ;
sTsValor.Free ;
sTsDiversos.Free ;

VisualizaDados(dsTab.IBQAuxiliar, True) ;
VisualizaDados(dsTab.IBQConfgECF, True) ;
VisualizaDados(dsTab.IBQAdcional, True) ;
VisualizaDados(dsTab.IBQVendaTotal, True) ;
VisualizaDados(dsTab.IBQVendaImpostos, True) ;
VisualizaDados(dsTab.IBQVendaComissao, True) ;
VisualizaDados(dsTab.IBQuery, True) ;
VisualizaDados(dsTab.IBQVendaFechamento, True) ;
VisualizaDados(dsTab.IBQTitulo, True) ;
Except
On e: eDatabaseerror Do
Begin
If gsAutomacao = ´CHACAL-ON´ Then
dsTab.IBTransChacal.Rollback
Else
dsTab.IBTransECF.Rollback ;

CancelaCupomECF() ;
ErroDb(e.Message) ;

VisualizaDados(dsTab.IBQAuxiliar, False) ;
VisualizaDados(dsTab.IBQConfgECF, False) ;
VisualizaDados(dsTab.IBQAdcional, False) ;
VisualizaDados(dsTab.IBQVendaTotal, False) ;
VisualizaDados(dsTab.IBQVendaImpostos, False) ;
VisualizaDados(dsTab.IBQVendaComissao, False) ;
VisualizaDados(dsTab.IBQuery, False) ;
VisualizaDados(dsTab.IBQVendaFechamento, False) ;
VisualizaDados(dsTab.IBQTitulo, False) ;

MessageDlg(´Para Integridade dos Dados o Cupom foi Cancelado !´, mtInformation, [mbOk], 0);
End;
On e: EConvertError Do
Begin
If gsAutomacao = ´CHACAL-ON´ Then
dsTab.IBTransChacal.Rollback
Else
dsTab.IBTransECF.Rollback ;

CancelaCupomECF() ;
ErroDb(e.Message);

MessageDlg(´Para Integridade dos Dados o Cupom foi Cancelado !´, mtInformation, [mbOk], 0);
End;
End;
End;


Responder

Gostei + 0

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

Aceitar