hola buenas tardes vengo a pedirles ayuda para comprende como se ria la forma correcta de actualizar y eliminar una factura
la cual esta dividida en dos partes cabecera y detalle
el problema lo tengo en que tambien tengo a actualizar los datos en la tabla existencia la duda me nace como saber cuando debe restar o sumar la cantida
ejemplo en la factura #01252
se ingresaron tres productos los cuales uno de ellos se le ingreso un cantidad erronea
ahi es donde tengo la duda como hacer para saber como manejar la actualizacion de la cantidad
cuando realizo el ingreso de la factura al producto H200 le puso una cantidad de 20 ahi se realiza una suma pero hoy q van a actualizar le va a poner 12 como seria si a otro produto le pone mas lo trabajo en un grid
este es el codigo para realizar la consulta de la factura
Dim comando As SQLiteCommand
Dim lector As SQLiteDataReader
Dim DT As New DataTable
Dim conexion As New SQLiteConnection(connstring)
If txtbuscar.Text = Nothing Then
msgerror.SetError(txtbuscar, "Campo requerido!!!")
txtbuscar.Focus()
Else
Try
conexion.Open()
comando = New SQLiteCommand("select entradas_cb.nfactura, entradas_cb.fecha, entradas_cb.cod_prov, entradas_cb.total from entradas_cb where entradas_cb.nfactura=@buscar", conexion)
comando.Parameters.AddWithValue("@buscar", txtbuscar.Text)
lector = comando.ExecuteReader
Dim cmd As New SQLiteCommand("SELECT entradas_dt.cod_prod,productos.nombre,unme_medida.abreviatura,entradas_dt.cantida,entradas_dt.punitario,entradas_dt.ptotal FROM entradas_dt inner join productos on productos.cod_prod = entradas_dt.cod_prod inner join unme_medida on productos.cod_unme=unme_medida.cod_unme WHERE entradas_dt.nfactura=@buscar", conexion)
cmd.Parameters.AddWithValue("@buscar", txtbuscar.Text)
Dim DA As New SQLiteDataAdapter(cmd)
DA.Fill(DT)
If lector.Read Then
txtnfact.Text = lector(0)
txtfecha.Text = lector(1)
pv = lector(2)
txttotal.Text = lector(3)
dgentrada.DataSource = DT
'** llenar combo
cbprov.DataSource = combo()
cbprov.DisplayMember = "nombre"
cbprov.ValueMember = "cod_prov"
btagregar.Enabled = True
btquitar.Enabled = True
btactualizar.Enabled = True
bteliminar.Enabled = True
dgentrada.AllowUserToAddRows = True
Else
txtnfact.Text = Nothing
txtfecha.Text = Nothing
pv = Nothing
txttotal.Text = Nothing
cbprov.DataSource = Nothing
btagregar.Enabled = False
btquitar.Enabled = True
btactualizar.Enabled = True
bteliminar.Enabled = True
dgentrada.DataSource = Nothing
End If
lector.Close()
Catch ex As Exception
MsgBox("El error fue: " & ex.Message)
Finally
conexion.Close()
End Try
End If
este codigo es el de actualizar que tengo
Try
Using conn As New SQLiteConnection(connstring)
conn.Open()
'*** guarda la cabecera de la entrada
Dim query As String = "UPDATE entradas_cb SET fecha=@fecha,cod_prov=@cod_prov,total=@total WHERE nfactura=@nfactura "
Dim cmd As New SQLiteCommand(query, conn)
cmd.Parameters.AddWithValue("@fecha", txtfecha.Value)
cmd.Parameters.AddWithValue("@cod_prov", pv)
cmd.Parameters.AddWithValue("@total", txttotal.Text)
cmd.Parameters.AddWithValue("@nfactura", txtnfact.Text)
If dgentrada.Rows.Count > 0 Then
Dim result As DialogResult
result = MessageBox.Show("¿Desea Agregar el nuevo registro?", "Mensaje", MessageBoxButtons.OKCancel)
If result = DialogResult.OK Then
'*** guardar detalle de la entrada
Dim query1 As String = "UPDATE entradas_dt SET cod_prod=@cod_prod,cantida=@cantida,punitario=@punitario,ptotal=@ptotal WHERE nfactura=@nfactura )"
Dim cmd1 As New SQLiteCommand(query1, conn)
'*ejecuata para guardar la cb
cmd.ExecuteNonQuery()
'** parte para recorrer el grid y guardarlo
For Each row As DataGridViewRow In dgentrada.Rows
cmd1.Parameters.Clear()
cmd1.Parameters.AddWithValue("@cod_prod", row.Cells("cod_prod").Value)
cmd1.Parameters.AddWithValue("@cantida", row.Cells("cantida").Value)
cmd1.Parameters.AddWithValue("@punitario", row.Cells("punitario").Value)
cmd1.Parameters.AddWithValue("@ptotal", row.Cells("ptotal").Value)
cmd1.Parameters.AddWithValue("@nfactura", txtnfact.Text)
'*ejecuta para guardar el dt
cmd1.ExecuteNonQuery()
'*** actualizar la cantida en existencia
Dim exist As String = "Update existencias SET cantida= (cantida +@cantidad)" & _
"WHERE cod_prod =@codprod"
Dim up As New SQLiteCommand(exist, conn)
up.Parameters.AddWithValue("@cantidad", row.Cells("cantida").Value)
up.Parameters.AddWithValue("@codprod", row.Cells("cod_prod").Value)
'*ejecuta la actualizacion
up.ExecuteNonQuery()
'*** actualizar la punitario en existencia
Dim p_exist As String = "Update existencias SET punitario= @punitario WHERE cod_prod =@codprod and punitario < @punitario"
Dim up_p As New SQLiteCommand(p_exist, conn)
up_p.Parameters.AddWithValue("@punitario", row.Cells("punitario").Value)
up_p.Parameters.AddWithValue("@codprod", row.Cells("cod_prod").Value)
'*ejecuta la actualizacion
up_p.ExecuteNonQuery()
Next
MessageBox.Show("Registro Guardado", "Mensaje")
'limpiar los controles
txtnfact.Text = ""
txttotal.Text = ""
cbprov.DataSource = Nothing
dgentrada.DataSource = Nothing
dgentrada.Rows.Clear()
btagregar.Enabled = False
btquitar.Enabled = False
btguardar.Enabled = False
btactualizar.Enabled = False
bteliminar.Enabled = False
msgerror.Clear()
Else
End If
Else
MessageBox.Show("Agregar los productos a registrar", "Mensaje")
End If
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
el problema esta en como majer las cantidades de los productos en la tabla existencia