Skip to content

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

Documentação de Testes