none
Crear Folio de Identificación a cliente RRS feed

  • Pregunta

  • Hola, soy nuevo en el mundo de la programación, quisiera que apoyaran o mostraran como generar un Folio consecutivo pero al inicio del folio lleve los ultimos 3 Digitos del Año es de 020-0000, 020-0001 y que al concluir el año este folio se reinicie de la siguiente forma 021-0000, 021-0001 estoy trabajando en visual Basic .Net .

    El form esta vinculado a una base de datos access.

    Aqui les dejo el codigo que llevo hasta el momento. Les agradeceria mucho que me apoyaran. Saludos

    Private Sub Registro_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Cargacombo()
            CargaTipo()
            CargaGestion()
            MostrarRegistros()
    
    
    
    
        End Sub
        Private Sub ButtonGuardar_Click(sender As Object, e As EventArgs) Handles ButtonGuardar.Click
            Try
                Comando = New OleDb.OleDbCommand(" INSERT INTO Registro ( Folio, CondEmpresa, Contacto, NumTel, Email, Pais, Estado, Municipio, Tipo, Gestion, NumCasasDeptos, ImpLicencia, FRegistro, FVencimiento)" & Chr(13) &
                                          "VALUES( TxtFolio, TxtCondomio, TxtContacto, TxtTelefono, TxtEmail, CbxPais, CbxEstado, CbxMunicipio, CbxTipo, CbxGestion, TxtCasas,TxtLicencia, DtpRegistro, DtpVencimiento)", Conexion)
    
                Comando.Parameters.AddWithValue("@Folio", TxtFolio.Text)
                Comando.Parameters.AddWithValue("@CondEmpresa", TxtCondomio.Text)
                Comando.Parameters.AddWithValue("@Contacto", TxtContacto.Text)
                Comando.Parameters.AddWithValue("@NumTel", TxtTelefono.Text)
                Comando.Parameters.AddWithValue("@Email", TxtEmail.Text)
                Comando.Parameters.AddWithValue("@Pais", CbxPais.Text)
                Comando.Parameters.AddWithValue("@Estado", CbxEstado.Text)
                Comando.Parameters.AddWithValue("@Municipio", CbxMunicipio.Text)
                Comando.Parameters.AddWithValue("@Tipo", CbxTipo.Text)
                Comando.Parameters.AddWithValue("@Gestion", CbxGestion.Text)
                Comando.Parameters.AddWithValue("@NumCasasDetpos", TxtCasas.Text)
                Comando.Parameters.AddWithValue("@ImpLicencia", CurrencyLicencia.Valor)
                Comando.Parameters.AddWithValue("@FRegistro", DtpRegistro)
                Comando.Parameters.AddWithValue("@FVencimiento", DtpVencimiento)
    
                Comando.ExecuteNonQuery()
    
                MsgBox("Registro Guardado Correctamente", vbInformation, "Aviso")
                MostrarRegistros()
            Catch ex As Exception
                MsgBox("No se guardo debido a:" + ex.ToString)
            End Try
    
        End Sub
        Public Sub Cargacombo()
    
            Dim tabla As New DataTable
            Dim sql As String = "SELECT IdPais, Nombre FROM Paises"
            Dim adp As New OleDb.OleDbDataAdapter(sql, Conexion)
            adp.Fill(tabla)
    
            Dim DataRow = tabla.NewRow()
            DataRow("Nombre") = "Seleccione"
    
            tabla.Rows.InsertAt(DataRow, 0)
    
            CbxPais.DataSource = tabla
    
            CbxPais.DisplayMember = "Nombre"
            CbxPais.ValueMember = "IdPais"
        End Sub
        Private Sub CbxPais_SelectedValueChanged(sender As Object, e As EventArgs) Handles CbxPais.SelectedValueChanged
    
            Dim cod As Integer = Val(CbxPais.SelectedValue.ToString)
    
            Dim tabla As New DataTable
            Dim sql As String = "SELECT IdEstado, Nombre FROM Estados WHERE IdPais =" & cod
            Dim adp As New OleDb.OleDbDataAdapter(sql, Conexion)
            adp.Fill(tabla)
    
            Dim DataRow = tabla.NewRow()
            DataRow("Nombre") = "Seleccione"
    
            tabla.Rows.InsertAt(DataRow, 0)
    
            CbxEstado.DataSource = tabla
    
            CbxEstado.DisplayMember = "Nombre"
            CbxEstado.ValueMember = "IdEstado"
    
        End Sub
        Private Sub CbxEstado_SelectedValueChanged(sender As Object, e As EventArgs) Handles CbxEstado.SelectedValueChanged
    
            Dim cod As Integer = Val(CbxEstado.SelectedValue.ToString)
    
            Dim tabla As New DataTable
            Dim sql As String = "SELECT IdMunicipio, Nombre FROM Municipio WHERE IdEstado = " & cod
            Dim adp As New OleDb.OleDbDataAdapter(sql, Conexion)
            adp.Fill(tabla)
    
            Dim DataRow = tabla.NewRow()
            DataRow("Nombre") = "Seleccione"
    
            tabla.Rows.InsertAt(DataRow, 0)
    
            CbxMunicipio.DataSource = tabla
    
            CbxMunicipio.DisplayMember = "Nombre"
            CbxMunicipio.ValueMember = "IdMunicipio"
        End Sub
        Public Sub CargaTipo()
    
            Dim tabla As New DataTable
            Dim sql As String = "SELECT IdTipo, Nombre FROM Tipo"
            Dim adp As New OleDb.OleDbDataAdapter(sql, Conexion)
            adp.Fill(tabla)
    
            Dim DataRow = tabla.NewRow()
            DataRow("Nombre") = "Seleccione"
    
            tabla.Rows.InsertAt(DataRow, 0)
    
            CbxTipo.DataSource = tabla
    
            CbxTipo.DisplayMember = "Nombre"
            CbxTipo.ValueMember = "IdTipo"
    
        End Sub
        Public Sub CargaGestion()
    
            Dim tabla As New DataTable
            Dim sql As String = "SELECT IdGestion, Nombre FROM Gestion"
            Dim adp As New OleDb.OleDbDataAdapter(sql, Conexion)
            adp.Fill(tabla)
    
            Dim DataRow = tabla.NewRow()
            DataRow("Nombre") = "Seleccione"
    
            tabla.Rows.InsertAt(DataRow, 0)
    
            CbxGestion.DataSource = tabla
    
            CbxGestion.DisplayMember = "Nombre"
            CbxGestion.ValueMember = "IdGestion"
    
        End Sub
        Public Sub MostrarRegistros()
    
            Dim adaptador As New OleDb.OleDbDataAdapter
            Dim Registros As New DataSet
            Dim Consulta As String
    
    
    
    
            Consulta = "SELECT CondEmpresa, Contacto, NumTel, Email, Pais, Estado, Municipio, Tipo, Gestion, NumCasasDeptos, ImpLicencia, FRegistro, FVencimiento FROM Registro"
            adaptador = New OleDb.OleDbDataAdapter(Consulta, Conexion)
            Registros.Tables.Add("Registro")
            adaptador.Fill(Registros.Tables("Registro"))
            DataGridView1.DataSource = Registros.Tables("Registro")
    
        End Sub
    
        Private Sub Registro_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
            Conexion.Close()
        End Sub
    
    End Class

     
    sábado, 11 de enero de 2020 0:28

Respuestas

  • Hola:
    Create una tabla como esta.
    CONTADOR
    ==========
     [NUMERO] [int] NOT NULL   Primary Key
     [ANEXO] [char] (3)
    Insertas 1 registro en esta tabla como por ejemplo:
    NUMERO=0
    ANEXO="020"

        Private Sub ButtonGuardar_Click(sender As Object, e As EventArgs) Handles ButtonGuardar.Click
            Try
                Dim lsQuery As String
                    'Iniciamos una transaccion
                    'Hay que añadir la Referencia System.Transactions
                Using MiTransaccion As New Transactions.TransactionScope
                    Using loConexion As New OleDbConnection(TU_CADENA_DE_CONEXION)
                            loConexion.Open()   ' abrir conexión
                            TxtFolio.Text = gF_sAsignaNumero(loConexion)
                            lsQuery = "INSERT INTO Registro ( Folio, CondEmpresa, Contacto, NumTel, Email, Pais, Estado, Municipio, Tipo, Gestion, NumCasasDeptos, ImpLicencia, FRegistro, FVencimiento) VALUES( @Folio, @CondEmpresa, @Contacto, @NumTel, @Email, @Pais, @Estado, @Municipio, @Tipo, @Gestion, @NumCasasDeptos, @ImpLicencia, @FRegistro, @FVencimiento)"
                        ' crear comando
                        Using loComando As New OleDbCommand(lsQuery, loConexion)
                            'añadir parametros al comando
                            loComando.Parameters.Add(New OleDbParameter("@Folio", TxtFolio.Text))
                            loComando.Parameters.Add(New OleDbParameter("@CondEmpresa", TxtCondomio.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Contacto", TxtContacto.Text))
                            loComando.Parameters.Add(New OleDbParameter("@NumTel", TxtTelefono.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Email", TxtEmail.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Pais", CbxPais.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Estado", CbxEstado.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Municipio", CbxMunicipio.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Tipo", CbxTipo.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Gestion", CbxGestion.Text))
                            loComando.Parameters.Add(New OleDbParameter("@NumCasasDeptos", TxtCasas.Text))
                            loComando.Parameters.Add(New OleDbParameter("@ImpLicencia", CurrencyLicencia.Valor))
                            loComando.Parameters.Add(New OleDbParameter("@FRegistro", DtpRegistro))
                            loComando.Parameters.Add(New OleDbParameter("@FVencimiento", DtpVencimiento))
                            loComando.ExecuteNonQuery()
                        End Using
                    End Using
                    MiTransaccion.Complete()
                End Using
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub


        Private Function gF_sAsignaNumero(ByRef rocnConexion As OleDbConnection) As String
           Dim lsQuery As String = "Update CONTADOR Set NUMERO=NUMERO+1"
           Dim lsValorRetorno As String = ""
           Try
              Using loComando As New OleDbCommand(lsQuery, rocnConexion)
                  loComando.ExecuteScalar()
              End Using
              lsQuery = "Select NUMERO, ANEXO From CONTADOR"
              Using loComando As New OleDbCommand(lsQuery, rocnConexion)
                  Using loDataReader As OleDbDataReader = loComando.ExecuteReader()
                      Do While loDataReader.Read()
                          lsValorRetorno = loDataReader.Item("ANEXO").ToString() & Format(loDataReader.Item("NUMERO"), "0000")
                      Loop
                  End Using
              End Using
          Catch ex As Exception
              MessageBox.Show(ex.Message, "gF_sAsignaNumero", MessageBoxButtons.OK, MessageBoxIcon.Information)
          End Try
          Return lsValorRetorno
       End Function

    Todo este codigo se resume en:
    1)Tienes que abrir una transaccion.
    2)Sumas a CONTADOR.NUMERO una unidad.
    3)Lees el valor de CONTADOR.NUMERO.
    4)Grabas la factura.
    5)Cierras la transaccion.
    Mientras esta abierta la transaccion, ningun usuario podra modificar el
    valor de CONTADOR.NUMERO, asi te aseguras de que ese numero solo podra usarse una vez.
    Espero que te sirva

              
    P.D.
    Veo que grabas el texto de los combos y las fechas no pones el value del DateTimePicker.
    NO me parece correcto esto, tendrias que grabar el valor del ValueMember.
    ¿Puedes poner la estructura de la tabla Registro, porque me imagino que el campo por ejemplo Pais sera caracter(50) en vez de ser numero(3) y que tenga una relacion con el campo IdPais de la tabla Pais?

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta Zparko sábado, 11 de enero de 2020 17:19
    sábado, 11 de enero de 2020 8:59

Todas las respuestas

  • Hola:
    Create una tabla como esta.
    CONTADOR
    ==========
     [NUMERO] [int] NOT NULL   Primary Key
     [ANEXO] [char] (3)
    Insertas 1 registro en esta tabla como por ejemplo:
    NUMERO=0
    ANEXO="020"

        Private Sub ButtonGuardar_Click(sender As Object, e As EventArgs) Handles ButtonGuardar.Click
            Try
                Dim lsQuery As String
                    'Iniciamos una transaccion
                    'Hay que añadir la Referencia System.Transactions
                Using MiTransaccion As New Transactions.TransactionScope
                    Using loConexion As New OleDbConnection(TU_CADENA_DE_CONEXION)
                            loConexion.Open()   ' abrir conexión
                            TxtFolio.Text = gF_sAsignaNumero(loConexion)
                            lsQuery = "INSERT INTO Registro ( Folio, CondEmpresa, Contacto, NumTel, Email, Pais, Estado, Municipio, Tipo, Gestion, NumCasasDeptos, ImpLicencia, FRegistro, FVencimiento) VALUES( @Folio, @CondEmpresa, @Contacto, @NumTel, @Email, @Pais, @Estado, @Municipio, @Tipo, @Gestion, @NumCasasDeptos, @ImpLicencia, @FRegistro, @FVencimiento)"
                        ' crear comando
                        Using loComando As New OleDbCommand(lsQuery, loConexion)
                            'añadir parametros al comando
                            loComando.Parameters.Add(New OleDbParameter("@Folio", TxtFolio.Text))
                            loComando.Parameters.Add(New OleDbParameter("@CondEmpresa", TxtCondomio.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Contacto", TxtContacto.Text))
                            loComando.Parameters.Add(New OleDbParameter("@NumTel", TxtTelefono.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Email", TxtEmail.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Pais", CbxPais.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Estado", CbxEstado.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Municipio", CbxMunicipio.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Tipo", CbxTipo.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Gestion", CbxGestion.Text))
                            loComando.Parameters.Add(New OleDbParameter("@NumCasasDeptos", TxtCasas.Text))
                            loComando.Parameters.Add(New OleDbParameter("@ImpLicencia", CurrencyLicencia.Valor))
                            loComando.Parameters.Add(New OleDbParameter("@FRegistro", DtpRegistro))
                            loComando.Parameters.Add(New OleDbParameter("@FVencimiento", DtpVencimiento))
                            loComando.ExecuteNonQuery()
                        End Using
                    End Using
                    MiTransaccion.Complete()
                End Using
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub


        Private Function gF_sAsignaNumero(ByRef rocnConexion As OleDbConnection) As String
           Dim lsQuery As String = "Update CONTADOR Set NUMERO=NUMERO+1"
           Dim lsValorRetorno As String = ""
           Try
              Using loComando As New OleDbCommand(lsQuery, rocnConexion)
                  loComando.ExecuteScalar()
              End Using
              lsQuery = "Select NUMERO, ANEXO From CONTADOR"
              Using loComando As New OleDbCommand(lsQuery, rocnConexion)
                  Using loDataReader As OleDbDataReader = loComando.ExecuteReader()
                      Do While loDataReader.Read()
                          lsValorRetorno = loDataReader.Item("ANEXO").ToString() & Format(loDataReader.Item("NUMERO"), "0000")
                      Loop
                  End Using
              End Using
          Catch ex As Exception
              MessageBox.Show(ex.Message, "gF_sAsignaNumero", MessageBoxButtons.OK, MessageBoxIcon.Information)
          End Try
          Return lsValorRetorno
       End Function

    Todo este codigo se resume en:
    1)Tienes que abrir una transaccion.
    2)Sumas a CONTADOR.NUMERO una unidad.
    3)Lees el valor de CONTADOR.NUMERO.
    4)Grabas la factura.
    5)Cierras la transaccion.
    Mientras esta abierta la transaccion, ningun usuario podra modificar el
    valor de CONTADOR.NUMERO, asi te aseguras de que ese numero solo podra usarse una vez.
    Espero que te sirva

              
    P.D.
    Veo que grabas el texto de los combos y las fechas no pones el value del DateTimePicker.
    NO me parece correcto esto, tendrias que grabar el valor del ValueMember.
    ¿Puedes poner la estructura de la tabla Registro, porque me imagino que el campo por ejemplo Pais sera caracter(50) en vez de ser numero(3) y que tenga una relacion con el campo IdPais de la tabla Pais?

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta Zparko sábado, 11 de enero de 2020 17:19
    sábado, 11 de enero de 2020 8:59
  • Hola:
    Create una tabla como esta.
    CONTADOR
    ==========
     [NUMERO] [int] NOT NULL   Primary Key
     [ANEXO] [char] (3)
    Insertas 1 registro en esta tabla como por ejemplo:
    NUMERO=0
    ANEXO="020"

        Private Sub ButtonGuardar_Click(sender As Object, e As EventArgs) Handles ButtonGuardar.Click
            Try
                Dim lsQuery As String
                    'Iniciamos una transaccion
                    'Hay que añadir la Referencia System.Transactions
                Using MiTransaccion As New Transactions.TransactionScope
                    Using loConexion As New OleDbConnection(TU_CADENA_DE_CONEXION)
                            loConexion.Open()   ' abrir conexión
                            TxtFolio.Text = gF_sAsignaNumero(loConexion)
                            lsQuery = "INSERT INTO Registro ( Folio, CondEmpresa, Contacto, NumTel, Email, Pais, Estado, Municipio, Tipo, Gestion, NumCasasDeptos, ImpLicencia, FRegistro, FVencimiento) VALUES( @Folio, @CondEmpresa, @Contacto, @NumTel, @Email, @Pais, @Estado, @Municipio, @Tipo, @Gestion, @NumCasasDeptos, @ImpLicencia, @FRegistro, @FVencimiento)"
                        ' crear comando
                        Using loComando As New OleDbCommand(lsQuery, loConexion)
                            'añadir parametros al comando
                            loComando.Parameters.Add(New OleDbParameter("@Folio", TxtFolio.Text))
                            loComando.Parameters.Add(New OleDbParameter("@CondEmpresa", TxtCondomio.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Contacto", TxtContacto.Text))
                            loComando.Parameters.Add(New OleDbParameter("@NumTel", TxtTelefono.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Email", TxtEmail.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Pais", CbxPais.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Estado", CbxEstado.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Municipio", CbxMunicipio.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Tipo", CbxTipo.Text))
                            loComando.Parameters.Add(New OleDbParameter("@Gestion", CbxGestion.Text))
                            loComando.Parameters.Add(New OleDbParameter("@NumCasasDeptos", TxtCasas.Text))
                            loComando.Parameters.Add(New OleDbParameter("@ImpLicencia", CurrencyLicencia.Valor))
                            loComando.Parameters.Add(New OleDbParameter("@FRegistro", DtpRegistro))
                            loComando.Parameters.Add(New OleDbParameter("@FVencimiento", DtpVencimiento))
                            loComando.ExecuteNonQuery()
                        End Using
                    End Using
                    MiTransaccion.Complete()
                End Using
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub


        Private Function gF_sAsignaNumero(ByRef rocnConexion As OleDbConnection) As String
           Dim lsQuery As String = "Update CONTADOR Set NUMERO=NUMERO+1"
           Dim lsValorRetorno As String = ""
           Try
              Using loComando As New OleDbCommand(lsQuery, rocnConexion)
                  loComando.ExecuteScalar()
              End Using
              lsQuery = "Select NUMERO, ANEXO From CONTADOR"
              Using loComando As New OleDbCommand(lsQuery, rocnConexion)
                  Using loDataReader As OleDbDataReader = loComando.ExecuteReader()
                      Do While loDataReader.Read()
                          lsValorRetorno = loDataReader.Item("ANEXO").ToString() & Format(loDataReader.Item("NUMERO"), "0000")
                      Loop
                  End Using
              End Using
          Catch ex As Exception
              MessageBox.Show(ex.Message, "gF_sAsignaNumero", MessageBoxButtons.OK, MessageBoxIcon.Information)
          End Try
          Return lsValorRetorno
       End Function

    Todo este codigo se resume en:
    1)Tienes que abrir una transaccion.
    2)Sumas a CONTADOR.NUMERO una unidad.
    3)Lees el valor de CONTADOR.NUMERO.
    4)Grabas la factura.
    5)Cierras la transaccion.
    Mientras esta abierta la transaccion, ningun usuario podra modificar el
    valor de CONTADOR.NUMERO, asi te aseguras de que ese numero solo podra usarse una vez.
    Espero que te sirva

              
    P.D.
    Veo que grabas el texto de los combos y las fechas no pones el value del DateTimePicker.
    NO me parece correcto esto, tendrias que grabar el valor del ValueMember.
    ¿Puedes poner la estructura de la tabla Registro, porque me imagino que el campo por ejemplo Pais sera caracter(50) en vez de ser numero(3) y que tenga una relacion con el campo IdPais de la tabla Pais?

    Un saludo desde Bilbo
    Carlos

    Muchas gracias, probare, nunca espere que la respuesta fuera tan rápida. estoy muy agradecido. podría contactarte más adelante por si tengo mas dudas? 
    sábado, 11 de enero de 2020 17:19