none
calcular el descuento de un Factura RRS feed

  • Pregunta

  • Buenas... Mi problema es que mis resultados no me los genera como deben de ser. Tengo un datagridviewFactura y abajo me deben de dar resultados calculables como lo muestro a continuacion en la imagen:

    solo tengo que ingresar el descuento en numero entero y el sistema me debe de arrojar los demás valores que no coinciden, este es mi código:

    private void txtDescuentoPor_TextChanged(object sender, EventArgs e)
            {
                int rows = DGV_Factura.Rows.Count - 1;
                if (TXT_Total.Text == "" && txtDescuento.Text == "" && txtDescuentoPor.Text=="")
                {
                    MessageBox.Show("Verifique si el descuento está vacío");
                }
                else
                {
                    double precio = 0;
                    double descuento = 0;
                    double descuentoTotal = 0;
                    double total;


                    for (int x = 0; x < rows; x++)
                    {
                        precio = (double)DGV_Factura.Rows[x].Cells[3].Value;
                    }

                    descuento = Convert.ToDouble(txtDescuentoPor.Text);
                    descuentoTotal = precio*(descuento/100);
                    txtDescuento.Text = descuentoTotal.ToString();
                    total = precio - descuentoTotal;
                    txtTotalNeto.Text = total.ToString();
                    txtFacturado.Text = txtTotalNeto.Text;
                }
            }

    necesito ayuda, dónde puede estar mi error?


    miércoles, 6 de mayo de 2020 4:34

Respuestas

  • hola

    private void txtDescuentoPor_TextChanged(object sender, EventArgs e)
    {
    	
    	if (TXT_Total.Text == "" || txtDescuento.Text == "" || txtDescuentoPor.Text=="")
    	{
    		MessageBox.Show("Verifique si el descuento está vacío");
    		return;
    	}
    
    	double precio = 0;
    	foreach (var row in DGV_Factura.Rows)
    	{
    		precio += Convert.ToDouble(row.Cells[3].Value);
    	}
    
    	double descuento = Convert.ToDouble(txtDescuentoPor.Text);
    	double descuentoTotal = precio*(descuento/100);
    	txtDescuento.Text = descuentoTotal.ToString();
    	
    	double total = precio - descuentoTotal;
    	txtTotalNeto.Text = total.ToString();
    	
    	txtFacturado.Text = txtTotalNeto.Text;
    	
    }

    - usa el foreach para iterar las rows del grid

    - si vas a sumar usa el += para ir acumulando

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 6 de mayo de 2020 5:11
  • Hola,

    Y además de lo que te ha dicho Leandro, estás calculando el descuento sobre el precio y no sobre el monto.

    Convert.ToDouble(row.Cells[5].Value)


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog

    miércoles, 6 de mayo de 2020 16:14
  • Es más, veo que ya tienes el subtotal calculado, en sub-totalC$ que no veo donde do calculado pero según la imagen está bien calculado. Pues aplica la fórmula del descuento sobre esa variable

    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog

    miércoles, 6 de mayo de 2020 16:21
  • Me genera este error usando tu código dentro del foreach

          foreach (var row in DGV_Factura.Rows)
                    {
                        precio += Convert.ToDouble(row.Cells[3].Value);
                    }

    Error 1 'object' no contiene una definición de 'Cells' ni se encontró ningún método de extensión 'Cells' que acepte un primer argumento de tipo 'object' (¿falta una directiva de uso o una referencia de ensamblado?)

    miércoles, 6 de mayo de 2020 18:15

Todas las respuestas

  • hola

    private void txtDescuentoPor_TextChanged(object sender, EventArgs e)
    {
    	
    	if (TXT_Total.Text == "" || txtDescuento.Text == "" || txtDescuentoPor.Text=="")
    	{
    		MessageBox.Show("Verifique si el descuento está vacío");
    		return;
    	}
    
    	double precio = 0;
    	foreach (var row in DGV_Factura.Rows)
    	{
    		precio += Convert.ToDouble(row.Cells[3].Value);
    	}
    
    	double descuento = Convert.ToDouble(txtDescuentoPor.Text);
    	double descuentoTotal = precio*(descuento/100);
    	txtDescuento.Text = descuentoTotal.ToString();
    	
    	double total = precio - descuentoTotal;
    	txtTotalNeto.Text = total.ToString();
    	
    	txtFacturado.Text = txtTotalNeto.Text;
    	
    }

    - usa el foreach para iterar las rows del grid

    - si vas a sumar usa el += para ir acumulando

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 6 de mayo de 2020 5:11
  • Hola,

    Y además de lo que te ha dicho Leandro, estás calculando el descuento sobre el precio y no sobre el monto.

    Convert.ToDouble(row.Cells[5].Value)


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog

    miércoles, 6 de mayo de 2020 16:14
  • Es más, veo que ya tienes el subtotal calculado, en sub-totalC$ que no veo donde do calculado pero según la imagen está bien calculado. Pues aplica la fórmula del descuento sobre esa variable

    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog

    miércoles, 6 de mayo de 2020 16:21
  • Me genera este error usando tu código dentro del foreach

          foreach (var row in DGV_Factura.Rows)
                    {
                        precio += Convert.ToDouble(row.Cells[3].Value);
                    }

    Error 1 'object' no contiene una definición de 'Cells' ni se encontró ningún método de extensión 'Cells' que acepte un primer argumento de tipo 'object' (¿falta una directiva de uso o una referencia de ensamblado?)

    miércoles, 6 de mayo de 2020 18:15
  • Tenías razón bro. Lo hice así y excelente:

    int rows = DGV_Factura.Rows.Count - 1;
                if (TXT_Total.Text == "" && txtDescuento.Text == "" && txtDescuentoPor.Text == "")
                {
                    MessageBox.Show("Verifique si el precio no está vacío");
                }
                else
                {
                    double precio = 0;
                    double descuento = 0;
                    double descuentoTotal = 0;
                    double SubTotal = 0;
                    double total;

                    for (int x = 0; x < rows; x++)
                    {
                        precio += (double)DGV_Factura.Rows[x].Cells[3].Value;
                    }
                    SubTotal = Convert.ToDouble(TXT_Total.Text);

                    descuento = Convert.ToDouble(txtDescuentoPor.Text);

                    descuentoTotal = SubTotal * (descuento / 100);
                    txtDescuento.Text = descuentoTotal.ToString();
                    total = precio - descuentoTotal;
                    txtTotalNeto.Text = total.ToString();
                    txtFacturado.Text = txtTotalNeto.Text;
                }

    GENIAL... MIL GRACIAS

    miércoles, 6 de mayo de 2020 18:52
  • Hola

     

     

    Gracias por levantar tu consulta en los foros de MSDN. Cerraremos el Hilo, por ende si tiene alguna otra consulta por favor genera otra consulta para que la comunidad de foros te pueda asesorar.

     

    Siempre es un placer atender tus consultas!

     

    Gracias por usar los foros de MSDN.

     

    Oscar Navarro

    martes, 19 de mayo de 2020 16:55
    Moderador