none
Actualizar una factura generada previamente RRS feed

  • Pregunta

  • Saludos tengo un formulario para generar ordenes de compras, el mismo funciona bien, pero tengo la duda de como hacer si existe la necesidad de actualizar algunos datos de dichas factura pongamos como ejemplo que se decida a dichas factura eliminarle una linea de los detalles, como debería hacerlo a sabiendas de que tengo la tabla encabezado y detalle de de factura

    Arismendy Rodríguez

    • Cambiado Enrique M. Montejo miércoles, 21 de junio de 2017 6:32 Pregunta relacionada con el acceso a datos con SQL Server.
    viernes, 16 de junio de 2017 0:48

Respuestas

  • Hola:

     No se si lo que quieres es la lógica a seguir o el código (código lo veo difícil puesto que no conocemos la estructura de tus tablas).

     ¿Como trabajaría yo?, crearía un formulario mediante el cual pueda obtener la factura junto con sus detalles, podría ser mediante el folio, fecha de creación, cliente, o cualquier identificador, bien podrías hacer también que se carguen todas las facturas en un DataGridView para luego al hacer click en un row cargar el encabezo en ciertos controles y el detalle en otro DataGridView, luego por ejemplo si quieres editar la cantidad de un articulo, haces click en un row del detalle y muestra el detalle del articulo en un formulario modal (showDialog) y ahí podrías editar sus valores, en el mismo DataGridView de detalle podrías eliminar registros, etc...

     Pero lejos de todo eso, asegúrate de no permitir la edición de facturas generadas y confirmadas puesto que si es una factura electrónica que cuenta con los respectivos sellos digitales lo mejor seria cancelarla y volverá a hacer ya que la al editar una factura electrónica alteraría completamente los sellos de la entidad reguladora de tu país.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta mendy123z miércoles, 21 de junio de 2017 15:35
    viernes, 16 de junio de 2017 1:22

Todas las respuestas

  • Hola:

     No se si lo que quieres es la lógica a seguir o el código (código lo veo difícil puesto que no conocemos la estructura de tus tablas).

     ¿Como trabajaría yo?, crearía un formulario mediante el cual pueda obtener la factura junto con sus detalles, podría ser mediante el folio, fecha de creación, cliente, o cualquier identificador, bien podrías hacer también que se carguen todas las facturas en un DataGridView para luego al hacer click en un row cargar el encabezo en ciertos controles y el detalle en otro DataGridView, luego por ejemplo si quieres editar la cantidad de un articulo, haces click en un row del detalle y muestra el detalle del articulo en un formulario modal (showDialog) y ahí podrías editar sus valores, en el mismo DataGridView de detalle podrías eliminar registros, etc...

     Pero lejos de todo eso, asegúrate de no permitir la edición de facturas generadas y confirmadas puesto que si es una factura electrónica que cuenta con los respectivos sellos digitales lo mejor seria cancelarla y volverá a hacer ya que la al editar una factura electrónica alteraría completamente los sellos de la entidad reguladora de tu país.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta mendy123z miércoles, 21 de junio de 2017 15:35
    viernes, 16 de junio de 2017 1:22
  • Saludos José Luis, si puedieras pasarme un codigo de ejemlo de como hacer de la forma que dices con el formulario modal (showDialog), ya luego lo puedo adaptar a los campo de mi base de datos. 

    ASi genero la orden.

    Sub GuardarOrden()
            Try
                If (txtComercio.Text) = "" Then
                    MessageBox.Show("Ingrese el comercio.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                    Me.txtComercio.Focus()
                    Exit Sub
                End If
                If (txtDetalle.Text) = "" Then
                    MessageBox.Show("Ingrese el detalle.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                    Me.txtDetalle.Focus()
                    Exit Sub
                End If
    
                Dim cmd As New SqlCommand
                cmd.Connection = con
                cmd.CommandText = "insert into orden (orderId,oficio,comercio,ciudad,detalle,direccion,subtotal,descuento,itbis,descuento10,total,cedula,fechaOrden,letras,donador) values (@orderId,@oficio,@comercio,@ciudad,@detalle,@direccion,@subtotal,@descuento,@itbis,@descuento10,@total,@cedula,@fechaOrden,@letras,@donador)"
                cmd.Parameters.AddWithValue("@orderId", txtNumeroOrden.Text)
                cmd.Parameters.AddWithValue("@oficio", txtOficio.Text)
                cmd.Parameters.AddWithValue("@comercio", txtComercio.Text)
                cmd.Parameters.AddWithValue("@ciudad", txtCiudad.Text)
                cmd.Parameters.AddWithValue("@detalle", txtDetalle.Text)
                cmd.Parameters.AddWithValue("@direccion", txtDireccion.Text)
                Dim dSubTotal As Decimal = Decimal.Parse(txtSubtotal.Text)
                cmd.Parameters.AddWithValue("@subtotal", dSubTotal)
                Dim dDescuento As Decimal = Decimal.Parse(txtDescuento.Text)
                cmd.Parameters.AddWithValue("@descuento", dDescuento)
                Dim dITBIS As Decimal = Decimal.Parse(txtITBIS.Text)
                cmd.Parameters.AddWithValue("@itbis", dITBIS)
                Dim dImpuestoLocal As Decimal = Decimal.Parse(txtimpuestolocal10.Text)
                cmd.Parameters.AddWithValue("@descuento10", dImpuestoLocal)
                Dim dTotal As Decimal = Decimal.Parse(txtTotal.Text)
                cmd.Parameters.AddWithValue("@total", dTotal)
                cmd.Parameters.AddWithValue("@cedula", txtCedula.Text)
                cmd.Parameters.AddWithValue("@fechaOrden", dtpFechaOrden.Value)
                cmd.Parameters.AddWithValue("@letras", txtTotalLetras.Text)
                cmd.Parameters.AddWithValue("@donador", cmbDonacion.Text)
                cmd.ExecuteNonQuery()
                ' Dim cmdcodigoOrden As New SqlCommand("SELECT @@IDENTITY", con)
                Dim cmdcodigoOrden As New SqlCommand("SELECT MAX(ORDERID) FROM ORDEN", con)
                Dim codigoFactura = Convert.ToInt32(cmdcodigoOrden.ExecuteScalar())
    
                '' Dim filasafectadas As Integer
                'filasafectadas = cmd.ExecuteNonQuery
                'Agregamos Detalle a Detalle
                Dim orden As New OrdenBE
                ' For Each detalle As DetalleOrdenBE In orden.DetalleOrden
                Dim cmdDetalles As New SqlCommand
                For Each detalle As DetalleOrdenBE In listado 'orden.DetalleOrden
                    cmdDetalles.Parameters.Clear()
                    cmdDetalles.Connection = con
                    cmdDetalles.CommandText = "insert into DETALLE_ORDEN (Orderid, DEOR_cantidad, DEOR_unidadMedida,DEOR_descripcionarticulo,DEOR_precioUnitario, DEOR_importe) values (@Orderid, @DEOR_cantidad, @DEOR_unidadMedida,@DEOR_descripcionarticulo,@DEOR_precioUnitario, @DEOR_importe)"
                    cmdDetalles.Parameters.AddWithValue("@Orderid", codigoFactura)
                    cmdDetalles.Parameters.AddWithValue("@DEOR_descripcionarticulo", detalle.Descripcion)
                    cmdDetalles.Parameters.AddWithValue("@DEOR_precioUnitario", detalle.PrecioUnitario)
                    cmdDetalles.Parameters.AddWithValue("@DEOR_importe", detalle.Importe)
                    cmdDetalles.Parameters.AddWithValue("@DEOR_unidadMedida", detalle.UnidadMedida)
                    cmdDetalles.Parameters.AddWithValue("@DEOR_cantidad", detalle.Cantidad)
                    Dim filas As Integer = cmdDetalles.ExecuteNonQuery()
                Next
                MessageBox.Show("Orden creada correctamente")
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
            End Try
        End Sub

    PEro como te dije si me pasa un ejemplo de la forma que dices puedo adaptarlo, me es urgente


    Arismendy Rodríguez

    viernes, 16 de junio de 2017 11:45
  • es que el problema no eta en la factura.. el problema esta en la base de datos... solo la cargas a un formulario.. y luego con la instruccion update le actualizas lo que desees cambiarle. y con delete le eliminas lo que quieras eliminar (claro si estas con sql)

    • Marcado como respuesta Joyce_AC martes, 20 de junio de 2017 15:31
    • Desmarcado como respuesta mendy123z martes, 20 de junio de 2017 16:53
    viernes, 16 de junio de 2017 21:10
  • Tu respuesta no ayuda mucho, pero Gracias de todas formas Rolando.

    Arismendy Rodríguez

    viernes, 16 de junio de 2017 21:49