none
Que los calculos totales del IVA y Total salgan bien de una Factura RRS feed

  • Pregunta

  • saludos amigos del foro les traigo un incoveniente, estoy desarrollando una factura, como veran en la imagen el preico unitario esta bien y el precio venta tambien ahora cuando hago los calculos de totalizacion de la factura no me concuerda, me podra ayudar por favor.

                'Moneda Nacional
                'Calculamos los totales
                txtSubTotmn1.Text = nue_fac.Calcula_Suma_MN().ToString
                txtDesctomn.Text = (CDbl(txtSubTotmn1.Text) * (If(txtPordescto2.Text <> "0" And txtPordescto2.Text <> "", CDbl(txtPordescto2.Text), 0) / 100)).ToString
                txtSubTotmn2.Text = (CDbl(txtSubTotmn1.Text) - CDbl(txtDesctomn.Text)).ToString
                txtImpuestomn.Text = Round(CDbl(txtSubTotmn2.Text) * (Sys_Impuesto1 / 100), 2).ToString
                txtTotmn.Text = Round(CDbl(txtSubTotmn2.Text) * (Sys_Impuesto1 / 100 + 1), 2).ToString
                txtMontomn.Text = txtTotmn.Text

                'Dolares
                'Calculamos los totales
                txtSubTotdol1.Text = nue_fac.Calcula_Suma_MN().ToString
                txtDesctodol.Text = (CDbl(txtSubTotdol1.Text) * (If(txtPordescto2.Text <> "0" And txtPordescto2.Text <> "", CDbl(txtPordescto2.Text), 0) / 100)).ToString
                txtSubTotdol2.Text = (CDbl(txtSubTotdol1.Text) - CDbl(txtDesctodol.Text)).ToString
                txtImpuestodol.Text = Round(CDbl(txtSubTotdol2.Text) * (Sys_Impuesto1 / 100), 2).ToString
                txtTotdol.Text = Round(CDbl(txtSubTotdol2.Text) * (Sys_Impuesto1 / 100 + 1), 2).ToString
                txtMontodol.Text = txtTotdol.Text

    sábado, 21 de julio de 2018 18:13

Todas las respuestas

  • Saludos, alguien que me pueda ayudar por favor...
    domingo, 22 de julio de 2018 5:48
  • Hola Rudolf Heiner:

    Si te refieres que no te cuadra porque en la línea tienes un total de 32.595.42 y en el total te salen 32.595,41. Entonces no te va a cuadrar nunca.

    Los precios se computan siempre sin impuestos, y luego se aplica el impuesto a la base imponible (o al bruto si es el caso), para extraer un total neto. Si tu aplicas el impuesto y luego lo descuentas, puede ocurrir que no te cuadre.

    Te pongo un ejemplo simple.

    Yo trabajo en España y quiero vender a 100 Euros. el tipo de Iva es de 21 %.

    Si a 100 euros le descuento el 21 por ciento, me quedan 82.64 Si a 82.64 le aplico el 21 por ciento tengo 17.35, que sumados me dan 99.99

    Si a 82.65 le aplico el 21 % son 17.36 por tanto me da 100.01.

    Resultado no puedo vender a 100 Euros.

    Si por tu lógica de negocio o similar, tienes que aplicar los precios con impuestos en las líneas o en el mismo total, tendrás que realizar un "engaño", a los números, para que el resultante final cuadre.

    Espero te ayude.

    domingo, 22 de julio de 2018 6:28
  • Saludos Javi gracias por responder y como haria el enganio, quedo de ti.
    domingo, 22 de julio de 2018 9:31
  • Perdona que no tengo el equipo delante.

    Tal cual tu lo tienes yo verificaria que el neto menos la base no sea diferente al iva mas menos dos centimos.

    Si estoy fuera de rango ...error. Sino y el neto menos la base no es igual al iva. Cargo en el iva el neto menos la base.

    Resultado: base ok. Neto ok. Iva relativa trampa.

    Si utilizasemos en vez de dos decimales, tres el margen de error seria minimo.

    Espero te ayude.

    Si no entre la noche o la mañana te lo explico un poco mas

    Un saludo

    domingo, 22 de julio de 2018 17:01
  • Ok Javi estare esperando tu respuesta, saludos.
    lunes, 23 de julio de 2018 4:36
  • Hola Rudolf:

    Puedes hacer algo como esto.

            Dim impuestos, total, subtotal, absTotal, absSubtotal, absImpuestos As Double
            impuestos = CDbl(txtImpuestomn.Text)
            total = CDbl(txtTotmn.Text)
            subtotal = CDbl(txtSubTotmn2.Text)
            absSubtotal = Math.Abs(subtotal)
            absTotal = Math.Abs(total)
            absImpuestos = Math.Abs(impuestos)
    
            If ((absTotal - absSubtotal) <> (absImpuestos)) Then
                '/*Aqui va la suma del precio de venta de las lineas */
                total = 32595.42D
                If (total > 0) Then
                    impuestos = total - subtotal '/*Si el neto es positivo los impuestos son el neto menos el subtotal*/
                Else
                    impuestos = total + subtotal '/*Si el neto es negativo los impuestos son el neto mas el subtotal*/
                    '/*Asignas los valores correctos a tus textbox.... Faltan los dolares.*/
                    txtTotmn.Text = Math.Round(total, 2).ToString
                    txtImpuestomn.Text = Math.Round(impuestos, 2).ToString
    
    
                End If
            End If
    
    

    Un saludo
    lunes, 23 de julio de 2018 8:32
  • Gracias Javi por responder lo vere mas tarde y te comento y gracias, saludos.
    lunes, 23 de julio de 2018 15:02
  • Hola Javi sigue estando mal el codigo mira este es mi codigo y te envio un pantallazo:

                'Moneda Nacional
                'Calculamos los totales
                txtSubTotmn1.Text = nue_fac.Calcula_Suma_MN().ToString
                txtDesctomn.Text = (CDbl(txtSubTotmn1.Text) * (If(txtPordescto2.Text <> "0" And txtPordescto2.Text <> "", CDbl(txtPordescto2.Text), 0) / 100)).ToString
                txtSubTotmn2.Text = (CDbl(txtSubTotmn1.Text) - CDbl(txtDesctomn.Text)).ToString
                txtImpuestomn.Text = Round(CDbl(txtSubTotmn2.Text) * (CDbl(Sys_Impuesto1) / 100), 2).ToString
                txtTotmn.Text = Round(CDbl(txtSubTotmn2.Text) * (CDbl(Sys_Impuesto1) / 100 + 1), 2).ToString

                Dim impuestos, total, subtotal, absTotal, absSubtotal, absImpuestos As Double
                impuestos = CDbl(txtImpuestomn.Text)
                total = CDbl(txtTotmn.Text)
                subtotal = CDbl(txtSubTotmn2.Text)
                absSubtotal = Abs(subtotal)
                absTotal = Abs(total)
                absImpuestos = Abs(impuestos)

                If ((absTotal - absSubtotal) <> (absImpuestos)) Then
                    '/*Aqui va la suma del precio de venta de las lineas */
                    total = nue_fac.Calcula_Suma_PVTAIMPUESTO()
                    If (total > 0) Then
                        impuestos = total - subtotal '/*Si el neto es positivo los impuestos son el neto menos el subtotal*/
                    Else
                        impuestos = total + subtotal '/*Si el neto es negativo los impuestos son el neto mas el subtotal*/
                        '/*Asignas los valores correctos a tus textbox.... Faltan los dolares.*/
                        txtTotmn.Text = Round(total, 2).ToString
                        txtImpuestomn.Text = Round(impuestos, 2).ToString
                    End If
                End If

                txtMontomn.Text = txtTotmn.Text

    El Total tiene que ser 32595,42
    martes, 24 de julio de 2018 6:01
  • Hola Rudolf:

    Error mío, el if cierra nada más pasar el else

    Else
                         impuestos = total + subtotal '/*Si el neto es negativo los impuestos son el neto mas el subtotal*/
    End If
                         '/*Asignas los valores correctos a tus textbox.... Faltan los dolares.*/
                         txtTotmn.Text = Round(total, 2).ToString
                         txtImpuestomn.Text = Round(impuestos, 2).ToString
            

    Si pones un punto de interrupción en la línea donde esta total = nue_fac.Calcula_Suma_PVTAIMPUESTO(), tienes que salir con 32595.42D

    Un saludo

    martes, 24 de julio de 2018 6:59
  • Funciona a la perfección Javi, gracias por tu ayuda, saludos.
    martes, 24 de julio de 2018 8:11
  • De nada. Es un placer
    martes, 24 de julio de 2018 10:35