Author Topic: ayudar en actualizar factura  (Read 3810 times)

0 Members and 1 Guest are viewing this topic.

Offline fre_saga

  • Sv Member
  • ***
  • Posts: 275
ayudar en actualizar factura
« on: May 15, 2013, 06:24:00 pm »
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

Code: [Select]
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
Code: [Select]
  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

Offline tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Posts: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:ayudar en actualizar factura
« Reply #1 on: May 16, 2013, 03:52:24 pm »
no actualices la tabla hasta que este terminada la factura....

no entiendo tu código (no estoy diciendo que esta mal) pero deberías actualizar la tabla hasta que impriman la factura, si es que es el último paso, porque generalmente es lo último..... no hagas updates/insert según los insert/updates del dataGrid


si aún así esta mal, lo normal es la figura de Reversión, con eso eliminas en la tabla todo lo que este en el detalle de la factura y luego ingresan una nueva con los valores correctos....

lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Offline fre_saga

  • Sv Member
  • ***
  • Posts: 275
Re:ayudar en actualizar factura
« Reply #2 on: May 16, 2013, 04:58:44 pm »
me refiero a la hora de en ingresar los productos al sistema
que el usuario se equivoco  en una factora con 6 productos en uno le puso una cantidad erronea
y la busca y decide correjir las cantidades pero no logro hacer funcionar bien

con un producto me funciona bien  pero cuando ya cambio a todos los productos no
de esta forma tomo el dato erroneo

  Private Sub dgentrada_CellMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgentrada.CellMouseClick
        If e.ColumnIndex.Equals(3) Then
            cantexis = dgentrada.Rows(e.RowIndex).Cells("cantida").Value
            ' MsgBox(cantexis)
        End If
y si hago el update

'*** actualizar la cantida  en existencia


                            Dim exist As String = "Update existencias SET cantida= (cantida-@cantex +@cantidad) WHERE cod_prod =@codprod"
                            Dim up As New SQLiteCommand(exist, conn)
                            up.Parameters.AddWithValue("@cantex", cantexis)
                            up.Parameters.AddWithValue("@cantidad", row.Cells("cantida").Value)
                            up.Parameters.AddWithValue("@codprod", row.Cells("cod_prod").Value)
                            '*ejecuta la actualizacion
                            up.ExecuteNonQuery()

pero no actualiza correctamente las cantidades



Offline tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Posts: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:ayudar en actualizar factura
« Reply #3 on: May 16, 2013, 05:33:15 pm »
es que no hagas el update hasta que termine....


pero igual, si seguis de necio hace  esto....

antes de hacer el update actualiza tu almacen, consulta cuantos productos hay (15) luego hace el recorrido de TOOODO el grid para saber cuantos hay, luego hace la resta
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Offline fre_saga

  • Sv Member
  • ***
  • Posts: 275
Re:ayudar en actualizar factura
« Reply #4 on: May 20, 2013, 09:35:19 pm »
buenas noches regreso con otro proble que me a sur ji do, quiero realizar un reporte con ReportViewer el reporte que quiero realizar en como la factura con su cabecera y detalle pero no epodido armar la tabla como debe de ser la line de la cabecera y el detalle  este es un ejemplo de como quiero armar el reporte

N°factura   fecha               cliente               total
 f020          12/05/2013     fredy najarro      42.50

Codigo     nombre       um    cantida   punitario     ptotal
201           hedonal      lt        1            10.50        10.50
800           urea            qq      1            32             32

asi es como quiero armar el reporte pero no puedo asi que solicito de su ayuda para realizar el reporte


Offline tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Posts: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Offline fre_saga

  • Sv Member
  • ***
  • Posts: 275
Re:ayudar en actualizar factura
« Reply #6 on: May 25, 2013, 02:45:42 pm »
gracias por la ayuda ya logre solventar los problemas con los reportes
pero en esta ocacion vengo por otro problema que tengo  les comento
tengo una tabla cierre la cual tiene los siguientes campos fecha,codigo,cant_ent,cant_vent,existencia,punit,pvent
esa tabla se tiene que llenar con los datos de entrada y salida el problema es que no logro armar la query para sacar los valores para guarda los en la tabla cierre

Offline Jonhyrey

  • Sv Full Member
  • *
  • Posts: 558
Re:ayudar en actualizar factura
« Reply #7 on: May 27, 2013, 11:35:42 am »
Depende de como lo queras hacer... vas a ejecutar un proceso de cierre que genere la existencia mensual o vas a actualizar en linea esa tabla con cada movimiento? En caso que generes un proceso al final del mes. Se me ocurre esta logica del proceso para que tengas una alternativa:

1. Insertar los articulos que tienen existencia en la tabla de cierres

2. Podes generar una funcion o un sub-Select que te devuelva las entradas totales y una para todas las salidas del articulo

3. Con esta funcion o subselect,  haces un update masivo a cada articulo

4. Procesas el Saldo total (Entradas - Salidas)

5. Para reducir el rendimiento podes generar nada mas las existencias del mes de cada articulo con las funciones
escalares y utilizar el saldo final anterior de la misma tabla de cierres con otra funcion o subselect.


Una recomendacion para ti que empezas,  es que escribas en papel los pasos a seguir para llevar a cabo un proceso. Es posible que te pidan un proceso que parece ser complicado, pero si lo definis paso a paso es mas sencillo de lo que aparenta ser.

Saludos y suerte
« Last Edit: May 27, 2013, 11:45:04 am by Jonhyrey »