Access - AUTONUMERACION PERSONALIZADA

   
Vista:
Imágen de perfil de Eduard Alcántara Tobin

AUTONUMERACION PERSONALIZADA

Publicado por Eduard Alcántara Tobin micro.y.chip@gmail.com (11 intervenciones) el 14/04/2015 08:41:38
Buenos días expertos!

Yo me preguntaba, si hubiera la posibilidad de crear una autonumeracion personalizada para asignar a facturas, como la fecha actual 14/04/2015 --------> como 20150414-001, 20150414-002... y al dia siguiente fuera 20150415-001,etc eso es posible?
Gracias

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

AUTONUMERACION PERSONALIZADA

Publicado por j chiguer (65 intervenciones) el 14/04/2015 09:55:45
Buenas Noches, si lo puedes hacer, el metodo seria el siguiente:

1.- Tener dos campos uno para tu fecha y otro para el numerico y despues concatenarlos a un campo texto.
2.- En tu formulario, puedes o los campos de fecha y autonumerico, supongamos que tu tabla se llama facturas y los campos son fechafactura y NumeroFactura, Facturareal en el formulario donde vaz a generar tu factura

Option Compare Database
Option Explicit
Dim NF As Integer
Dim rs As Object
Dim Modificado As Boolean


Private Sub Form_Load()
'Abrimos la tabla en la que se basa el formulario
Set rs = CurrentDb.OpenRecordset("facturas")
End Sub

Private Sub Form_Current()
If Nz(Me.NumeroFactura) = 0 Then 'si no tiene nº de factura es nuevo
Me.NumeroFactura = rs.RecordCount + 1 'le ponemos uno mas que el nº de registros de la tabla
Me.fechafactura= date ' aqui debes darle formato, de lo contrario te traeria la fecha con hora
Modificado = True ' lo señalamos como modificado
End If
End Sub

Private Sub Form_Dirty(Cancel As Integer)
Modificado = True 'si se modifica un registro existente se señala como Modificado
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Me.Facturareal= Me.NumeroFactura&"-" &Me.fechafactura
If Modificado Then 'Antes de actualizar el registro comprobamos si cumple los requisitos
If MsgBox("REGISTRO MODIFICADO" & vbCr & vbCr & "Guardar cambios ?", vbCritical + vbDefaultButton2 + vbYesNo) = vbNo Then
Cancel = True
Modificado = Not Modificado
Me.Undo
DoCmd.GoToRecord , , acLast
Else

If Nz(Me.ConceptoFactura) = 0 Then
MsgBox "Obligatorio rellenar --> Concepto de la Factura"
Cancel = True
End If
End If
End If
End Sub


Private Sub Form_Unload(Cancel As Integer)
rs.Close
Set rs = Nothing
End Sub

En general este seria el codigo, no lo he provado segun tus necesidades, sin embargo este seria uno de los muchos metodos que puedes emplear.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduard

AUTONUMERACION PERSONALIZADA

Publicado por Eduard (11 intervenciones) el 15/04/2015 13:18:46
Muy buenos días Maestro,
Antetodo agradecerte mil veces, por tu tiempo y la rapidez en que me contestaste, pero a decir verdad soy un usuario poco experimentado con access y no he conseguido hacer funcionar el codigo. A continuación te expongo mis pasos a ver si es que me dejado algo. :S

1.- He creado una tabla "INVOICES dynamic" en la se encuentran los siguientes campos (pero sin datos):

-fechafactura(fecha/hora):
Formato: Fecha corta (15/04/2015)
Valor predeterminado: Fecha()

-numerofactura(numero):
Tamaño del campo:Entero largo
Formato:000

-factura(texto):

2.- He creado un formulario y en eventos al abrir le aplicado el codigo siguiente:

Option Compare Database
Option Explicit
Dim NF As Integer
Dim rs As Object
Dim Modificado As Boolean


Private Sub Form_Load()
'Abrimos la tabla en la que se basa el formulario
Set rs = CurrentDb.OpenRecordset("INVOICES dynamic")
End Sub

Private Sub Form_Current()
If Nz(Me.numeroFactura) = 0 Then 'si no tiene nº de factura es nuevo
Me.numerofactura = rs.RecordCount + 1 'le ponemos uno mas que el nº de registros de la tabla
Me.fechafactura= date ' aqui debes darle formato, de lo contrario te traeria la fecha con hora
Modificado = True ' lo señalamos como modificado
End If
End Sub

Private Sub Form_Dirty(Cancel As Integer)
Modificado = True 'si se modifica un registro existente se señala como Modificado
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Me.factura= Me.numfactura&"-" &Me.fechafactura
If Modificado Then 'Antes de actualizar el registro comprobamos si cumple los requisitos
If MsgBox("REGISTRO MODIFICADO" & vbCr & vbCr & "Guardar cambios ?", vbCritical + vbDefaultButton2 + vbYesNo) = vbNo Then
Cancel = True
Modificado = Not Modificado
Me.Undo
DoCmd.GoToRecord , , acLast
Else

If Nz(Me.ConceptoFactura) = 0 Then
MsgBox "Obligatorio rellenar --> Concepto de la Factura"
Cancel = True
End If
End If
End If
End Sub


Private Sub Form_Unload(Cancel As Integer)
rs.Close
Set rs = Nothing
End Sub

Me lanza error en codigo y nose que es lo que estoy haciendo mal, te agradeceria mucho si pudieras darme consejo, muchas Gracias.

Saludos,
Eduard
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AUTONUMERACION PERSONALIZADA

Publicado por j chiguer (65 intervenciones) el 15/04/2015 18:17:10
Hola! Buenos Días!

Espero poderte ayudar mandando el codigo implementado en una BD, dame oportunidad de terminar algunos pendientes que tengo el dìa de hoy y mañana y con gusto.
Solo dime de donde te comunicas y deja tu correo por favor.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduard

AUTONUMERACION PERSONALIZADA

Publicado por Eduard micro.y.chip@gmail.com (11 intervenciones) el 15/04/2015 19:09:01
Buenos dias,
Gracias por ofrecerte a ayudarme, de verdad que es un gran alivio poder contra contigo, mi correo es [url]micro.y.chip@gmail.com[/url] y si te va bien dejare colgado en el drive, el archivo por si necesitaras ver de mejor manera la idea que estoy intentando desarrollar. Muchas Gracias J chiger.

Saludos,
Eduard A.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduard

AUTONUMERACION PERSONALIZADA

Publicado por Eduard (11 intervenciones) el 18/04/2015 19:54:58
Buenas Juan,
al final el resultado ha sido muy bueno, pero aun me queda una ultima duda habria posibilidad de que recuperara la cuenta de la tabla de forma que si digasemos hoy estamos a 18/04/2015 y hubieramos realizado 3 facturas el dia 14/04/2015 (20150414-001, 20150414-002, 20150414-003) y ahora quisieramos realizar una del dia 14/04/2015 que recuperara esa cuenta y automaticamente asignara ya 20150414-004 al siguiente registro de la factura, de todas formas despues de realizar una factura me genera error... :( como podria llegar a resolver estos problemas? Gracias de antemano y como siempre un abrazo a tod@s los que se prestar a echar una mano en las consultas de este foro.

-Aqui esta el codigo del formulario(fINVOICES_dynamic) que alimenta la tabla(tINVOICES_dynamic):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Option Compare Database
Option Explicit
 
Dim NF As Integer
Dim rs As Object
Dim Modificado As Boolean
Dim fechatxt As Variant
Dim fechaanio As Variant
Dim fechames As Variant
Dim fechadia As Variant
Dim facturano As Variant
Dim facturarealtxt As String
 
 
 
 
Private Sub Form_Load()
'Abrimos la tabla en la que se basa el formulario
Set rs = CurrentDb.OpenRecordset("tINVOICES_dynamic")
End Sub
 
Private Sub Form_Current()
If Nz(Me.invoiceserie) = 0 Then 'si no tiene nº de factura es nuevo
    Me.invoiceserie = rs.RecordCount + 1 'le ponemos uno mas que el nº de registros de la tabla
    'Me.invoicedate = DATE 'aqui debes darle formato, de lo contrario te traeria la fecha con hora
    Modificado = True ' lo señalamos como modificado
End If
End Sub
 
Private Sub Form_Dirty(Cancel As Integer)
    Modificado = True 'si se modifica un registro existente se señala como Modificado
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
    fechames = Format(invoicedate, "MM")
    fechaanio = Format(invoicedate, "yyyy")
    fechadia = Format(invoicedate, "dd")
    facturano = Format(Me.invoiceserie, "000")
    facturarealtxt = fechaanio & fechames & fechadia & "-" & facturano
    Me.invoice = facturarealtxt
 
    If Modificado Then 'Antes de actualizar el registro comprobamos si cumple los requisitos
        If MsgBox("RECORD MODIFIED" & vbCr & vbCr & "Save Changes ?", vbCritical + vbDefaultButton2 + vbYesNo) = vbNo Then
            Cancel = True
            Modificado = Not Modificado
            Me.Undo
            DoCmd.GoToRecord , , acLast
        Else
            If Nz(Me.invoice) = "" Or IsNull(Me.invoicedate) Then
                MsgBox "No se genero el numero --> volver a hacerlo"
                Me.invoicedate.SetFocus
                Cancel = True
            End If
    End If
End If
End Sub
 
 
Private Sub Form_Unload(Cancel As Integer)
rs.Close
Set rs = Nothing
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar