none
Cómo puedo aplicar tres descuentos diferentes????

    Question

  • Hola

    Cómo puedo hacer para aplicar tres descuentos diferentes de los cuales uno esta en una de las columna del DataGridView y los otros dos estan en los TextBox.

    NOTA: No siempre se aplican los tres descuentos algunas veces sólo pueden ser los de los del TextBoxo uno de los TextBox y el de la columna del DataGrid puede variar.

    Tengo algo así pero no me funciona el descuento del txt_desc2 es decir no lo aplica. Cómo puedo hacerlo?????

        Private Sub DataGridView1_RowValidating(ByVal sender As Object, ByVal e As DataGridViewCellCancelEventArgs) Handles dgv_comp.RowValidating


    'Calcular el importe del precio unitario con descuento.
            '
            Dim row As DataGridViewRow = CType(dgv_comp.Rows(e.RowIndex), DataGridViewRow)
            Dim cantidad As Double = CDbl(row.Cells("cantidad").Value)
            Dim precio As Double = CDbl(row.Cells("preciouni").Value)
            Dim descuento As Double = CDbl(row.Cells("desc").Value)
            descuento = (precio * descuento) / 100
            Dim importe As Double = CDbl(row.Cells("importe").Value)
            Dim result As Double = CDbl(cantidad * precio)
            Dim desc1 As Double = CDbl(txt_desc1.Text)
            desc1 = (precio * desc1) / 100
            Dim desc2 As Double = CDbl(txt_desc2.Text)
            desc2 = (precio * desc2) / 100

            If descuento > 0 Then

                row.Cells("preciouni").Value = precio - descuento
                row.Cells("importe").Value = precio * cantidad

            End If
            row.Cells("importe").Value = result
            '
            'Calcula los descuentos de los TextBox desc1 y desc2.
            '
            If  desc1 > 0 Then
                '
                'Se saca el descuento de desc1
                row.Cells("preciouni").Value = precio - desc1
                row.Cells("importe").Value =precio * cantidad

            End If

            If  desc2 > 0 Then
                '
                'Se saca el descuento de desc2
                row.Cells("preciouni").Value = precio - desc2
                row.Cells("importe").Value = precio * cantidad

            End If

    End Sub

    Saludos.
    Tuesday, November 24, 2009 7:47 PM

Answers

  • hola

    pero el resultado final es el mismo mas alla si lo haces en varios pasos o en uno solo

    o sea si haces

    125 - 6.25 - 5.93 - 5.64 = 107.17

    que es basicamente esta misma formula: precio - descuento - desc1 - desc2

    o sea cual seria el objetivo de ir teniendo los resultados parciales, si al final solo veras en la celda del precio unitario con descuento el  107.17


    ahh no ya entendo el desc1 y desc2 se calcula se va calculando en cadena porque se aplica un descuento sobre el importe final con descuanto aplciado

    en ese caso podrias ser algo como esto

     Dim row As DataGridViewRow = CType(dgv_comp.Rows(e.RowIndex), DataGridViewRow)
            
    Dim cantidad As Double = CDbl(row.Cells("cantidad").Value)
     Dim precio As Double = CDbl(row.Cells("preciouni").Value)
            
    Dim descuento As Double = CDbl(row.Cells("desc").Value)
     descuento = (precio * descuento) / 100
     Dim desc1 As Double = 0
    Double.TryParse(txt_desc1.Text, desc1)
     desc1 = ((precio - descuento) * desc1) / 100
     Dim desc2 As Double = 0
    Double.TryParse(txt_desc2.Text, desc1)
     desc2 = ((precio - descuento - desc1) * desc2) / 100

     Dim preciounit As Double = precio - descuento - desc1 - desc2
     row.Cells("preciouni").Value = preciounit
     row.Cells("importe").Value = preciounit * cantidad


    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by DarkStar622 Wednesday, November 25, 2009 4:53 PM
    Wednesday, November 25, 2009 3:07 AM

All replies

  • hola

    podrías hacer algo como esto:


     Dim row As DataGridViewRow = CType(dgv_comp.Rows(e.RowIndex), DataGridViewRow)
            
    Dim cantidad As Double = CDbl(row.Cells("cantidad").Value)
     Dim precio As Double = CDbl(row.Cells("preciouni").Value)
            
    Dim descuento As Double = CDbl(row.Cells("desc").Value)
     descuento = (precio * descuento) / 100
     Dim desc1 As Double = 0
    Double.TryParse(txt_desc1.Text, desc1)
     desc1 = (precio * desc1) / 100
     Dim desc2 As Double = 0
    Double.TryParse(txt_desc2.Text, desc1)
     desc2 = (precio * desc2) / 100

    Dim preciounit As Double = precio - descuento - desc1 - desc2
     row.Cells("preciouni").Value = preciounit
     row.Cells("importe").Value = preciounit * cantidad


    como veras el TryParse lo que haces e sintentar parsear al tipo de dato, sino puede, deja un cero, o mejor dicho el valor por defecto del tipo de dato,o sea cero, entonces al ralizar la cuanta restar por cero es como no hacerlo, asi que puedes poner en el calculo el descuento en la misma linea


    Nota, una consulta el descuento es un porcentaje del precio ?
    lo pregunto porque haces desc1 = (precio * desc1) / 100, o es un valor absoluto que referncia a un importe especifico
    si es asi debería restarse directamente, o sea el descuento es del tipo 5% de descuento, o del tipo 10 pesos de descuento

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Wednesday, November 25, 2009 12:36 AM
  • Hola

    Leandro el procedimiento esta bien pero al momento de aplicar los descuentos al precio unitario bueno no me sale el resultado correcto, lo que veo es que se le tiene que ir aplicando el descuento a cada resultado que aparece en el precio unitario, no sé si me estoy explicando bien. Pongo un ejemplo.

    Cantidad=6    Precio unitario Normal:= 125    Importe=750

    descuento=5 operacion=(125*5)/100  descuento=6.25 Nuevo precio=125-6.25=118.75

    desc1=5  operación=(118.75 *5)/100   desc1= 5.93      Nuevo Precio= 118.75-5.93 = 112.81

    desc2=5   operación = (112.81 *5)/100   desc2= 5.64     Nuevo Precio Final= 112.81-5.64 =107.17

    Cómo se puede observar el precio unitario va cambiando conforme se le van aplicando los descuentos el ejemplo es parecido a como los estoy probando y bueno el resultado correcto es 107.17 aplicandole tres veces el 5% de descuento.

    Cómo puedo adaptar el código para que funcione como lo mencione??????

    Dim row As DataGridViewRow = CType(dgv_comp.Rows(e.RowIndex), DataGridViewRow)
            
    Dim cantidad As Double = CDbl(row.Cells("cantidad").Value)
     Dim precio As Double = CDbl(row.Cells("preciouni").Value)
            
    Dim descuento As Double = CDbl(row.Cells("desc").Value)
     descuento = (precio * descuento) / 100
     Dim desc1 As Double = 0
    Double.TryParse(txt_desc1.Text, desc1)
     desc1 = (precio * desc1) / 100
     Dim desc2 As Double = 0
    Double.TryParse(txt_desc2.Text, desc1)
     desc2 = (precio * desc2) / 100

    Dim preciounit As Double = precio - descuento - desc1 - desc2
     row.Cells("preciouni").Value = preciounit
     row.Cells("importe").Value = preciounit * cantidad

    Saludos.
    Wednesday, November 25, 2009 1:54 AM
  • hola

    pero el resultado final es el mismo mas alla si lo haces en varios pasos o en uno solo

    o sea si haces

    125 - 6.25 - 5.93 - 5.64 = 107.17

    que es basicamente esta misma formula: precio - descuento - desc1 - desc2

    o sea cual seria el objetivo de ir teniendo los resultados parciales, si al final solo veras en la celda del precio unitario con descuento el  107.17


    ahh no ya entendo el desc1 y desc2 se calcula se va calculando en cadena porque se aplica un descuento sobre el importe final con descuanto aplciado

    en ese caso podrias ser algo como esto

     Dim row As DataGridViewRow = CType(dgv_comp.Rows(e.RowIndex), DataGridViewRow)
            
    Dim cantidad As Double = CDbl(row.Cells("cantidad").Value)
     Dim precio As Double = CDbl(row.Cells("preciouni").Value)
            
    Dim descuento As Double = CDbl(row.Cells("desc").Value)
     descuento = (precio * descuento) / 100
     Dim desc1 As Double = 0
    Double.TryParse(txt_desc1.Text, desc1)
     desc1 = ((precio - descuento) * desc1) / 100
     Dim desc2 As Double = 0
    Double.TryParse(txt_desc2.Text, desc1)
     desc2 = ((precio - descuento - desc1) * desc2) / 100

     Dim preciounit As Double = precio - descuento - desc1 - desc2
     row.Cells("preciouni").Value = preciounit
     row.Cells("importe").Value = preciounit * cantidad


    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by DarkStar622 Wednesday, November 25, 2009 4:53 PM
    Wednesday, November 25, 2009 3:07 AM