Total do vOutro difere do somatório dos itens | Total do Frete difere do somatório dos itens
Software: Emissor NF-e | Grupo: NFE
Solução
O erro acontece ao tentar processar notas em certos casos, quando está preenchido o valor do Frete ou de outras despesas;
Passo 1: Comentar a chamada da função:
'NFe_setRatearCalculoImposto REGISTRO, Frete
'NFe_setRatearCalculoImposto REGISTRO, OutrasDespesas
Passo 2: Inserir no Após atualizar do campo Calculo_ValorFrete:
If (Me.REGISTRO > 0) Then
DoCmd.RunCommand acCmdSaveRecord
repartirVl Me.Calculo_ValorFrete, Me.REGISTRO, 1
End If
Passo 3: Inserir no Após atualizar do campo Calculo_OutrasDespesas:
If (Me.REGISTRO > 0) Then
DoCmd.RunCommand acCmdSaveRecord
repartirVl Me.Calculo_OutrasDespesas, Me.REGISTRO, 2
End If
Passo 4: Inserir no Após atualizar do campo DescontoV_AfterUpdate:
If (Me.REGISTRO > 0) Then
DoCmd.RunCommand acCmdSaveRecord
repartirVl Me.DescontoV, Me.REGISTRO, 3
End If
Passo 5: Inserir função no fim formulario NataFiscal_Cabecalho:
Public Function repartirVl(vlRepartir As Double, RegistroNFe As Integer, tipo As Integer)
On Error Resume Next
'Tipo: 1=FreteItem | 2=NFe_ItemOutros | 3=DescontoItemValor
Dim totalItem, totalNfe
Dim rsTotalItem, rsTotalNfe As Recordset
Dim scriptSql, VlTotalNfe
Dim vlRepartido As Double
totalItem = "SELECT [Mercadoria_Quantidade]*[Mercadoria_Preco] AS VlTotalItem, NotaFiscal_Itens.Ordem " & _
"FROM NotaFiscal_Cabecalho LEFT JOIN NotaFiscal_Itens ON NotaFiscal_Cabecalho.Registro = NotaFiscal_Itens.Registro " & _
"WHERE NotaFiscal_Cabecalho.Registro=" & RegistroNFe
'Debug.Print totalItem
totalNfe = "SELECT Sum([Mercadoria_Quantidade]*[Mercadoria_Preco]) AS VlTotalNfe " & _
"FROM NotaFiscal_Cabecalho LEFT JOIN NotaFiscal_Itens ON NotaFiscal_Cabecalho.Registro = NotaFiscal_Itens.Registro " & _
"WHERE NotaFiscal_Cabecalho.Registro =" & RegistroNFe
'Debug.Print totalNfe
Set totalItem = CurrentDb.OpenRecordset(totalItem, dbOpenDynaset, dbSeeChanges)
Set totalNfe = CurrentDb.OpenRecordset(totalNfe, dbOpenDynaset, dbSeeChanges)
VlTotalNfe = totalNfe.Fields("VlTotalNfe")
Dim temp
Dim Acumulador
Do While Not totalItem.EOF
vlRepartido = Format((CDbl(totalItem.Fields("VlTotalItem") / VlTotalNfe) * vlRepartir), "0.00")
Acumulador = Format(vlRepartido + Acumulador, "0.00")
temp = Replace(Nz(vlRepartido, 0), ",", ".")
'Debug.Print temp
Select Case tipo
Case 1
scriptSql = "UPDATE NotaFiscal_Itens SET NotaFiscal_Itens.FreteItem = " & temp & " WHERE NotaFiscal_Itens.Ordem=" & totalItem("Ordem")
Case 2
scriptSql = "UPDATE NotaFiscal_Itens SET NotaFiscal_Itens.NFe_ItemOutros = " & temp & " WHERE NotaFiscal_Itens.Ordem=" & totalItem("Ordem")
Case 3
scriptSql = "UPDATE NotaFiscal_Itens SET NotaFiscal_Itens.DescontoItemValor = " & temp & " WHERE NotaFiscal_Itens.Ordem=" & totalItem("Ordem")
Case Else
Exit Function
End Select
CurrentDb.Execute scriptSql, dbSeeChanges
totalItem.MoveNext
Loop
Dim Dif
Dif = Format(Acumulador - vlRepartir, "0.00")
Dim Maior, ORDEM
Maior = "SELECT TOP 1 NotaFiscal_Itens.FreteItem, NotaFiscal_Itens.NFe_ItemOutros,NotaFiscal_Itens.Ordem, NotaFiscal_Itens.DescontoItemValor " & _
"FROM NotaFiscal_Itens WHERE NotaFiscal_Itens.Registro=" & RegistroNFe & _
" ORDER BY [Mercadoria_Quantidade]*[Mercadoria_Preco] DESC"
Set Maior = CurrentDb.OpenRecordset(Maior, dbOpenDynaset, dbSeeChanges)
Select Case tipo
Case 1
Dif = Replace(Nz(Maior.Fields("FreteItem") - Dif, 0), ",", ".")
scriptSql = "UPDATE NotaFiscal_Itens SET NotaFiscal_Itens.FreteItem = " & Dif & " WHERE NotaFiscal_Itens.Ordem=" & Maior("Ordem")
Case 2
Dif = Replace(Nz(Maior.Fields("NFe_ItemOutros") - Dif, 0), ",", ".")
scriptSql = "UPDATE NotaFiscal_Itens SET NotaFiscal_Itens.NFe_ItemOutros = " & Dif & " WHERE NotaFiscal_Itens.Ordem=" & Maior("Ordem")
Case 3
Dif = Replace(Nz(Maior.Fields("DescontoItemValor") - Dif, 0), ",", ".")
scriptSql = "UPDATE NotaFiscal_Itens SET NotaFiscal_Itens.NFe_ItemOutros = " & Dif & " WHERE NotaFiscal_Itens.Ordem=" & Maior("Ordem")
Case Else
Exit Function
End Select
CurrentDb.Execute scriptSql, dbSeeChanges
End Function
- Feito isso, deverá ser relançado o valor do Frete e/ou o valor das Outras Despesas. Com isso a nota deverá processar normalmente;
Tags: desconto, voutro, total, difere, frete, somatório, somatorio, itens, total do frete difere do somatório dos itens, total do voutro difere do somatório dos itens