Modificar una máscara de entrada

A ver si me pueden ayudar ya que llevo mucho tiempo intentándolo sin conseguirlo. Estoy haciendo una base de datos de facturación y en un formulario para llevar las facturas había puesto una mascara de entrada "2009/001" "2009/002" etc... Lo del 2009/00x me sale bien pero cuando le digo que al hacer un nuevo formulario me pongo un número más me da error. No se como hacerlo bien. También me gustaría que cuando sea el 2010 me pusiera 2010/001...es decir el contador se reiniciara. Lo he puesto numérico para poder manipularlo pero nada no ahí manera. También he probado ha creo un txt que extrae el año vigente y sumárselo a un campo autonumérico pero no me sale tampoco.
Si me pudieran ayudar se lo agradecería eternamente.
Respuesta
1
Supongo que lo que deseas es llevar un contador de facturas cuyo formato sea AÑO/Numero, el cual te cambie al empezar un nuevo ejercicio.
Si me permites una sugerencia, yo haría una tabla para contadores y de un solo registro, para empezar tendrá un campo para AÑO y otro para CONTADOR. Cada vez que enfoque el formulario lees el registro de esta forma:
[tmp_año] = DLookup("[AÑO]", "[mtro contadores]", "[AÑO]<>0")
[tmp_contador] = DLookup("[CONTADOR]", "[mtro contadores]", "[AÑO]<>0")
[alfcampo] = CDate(Date)
[año_actual] = (2000 + Val(Mid([alfcampo], 7, 2)))
''
IF [tmp_año] <> [año_actual] THEN
[TMP_año] = [año_actual]
[tmp_contador] = 0
end if
''
[tmp_contador=] = [tmp_contador] + 1
En TMP_contador tendrás el numero de factura que corresponde (restaurado si ha cambiado el año), y en TMP_año el año en curso. Con estos dos campos ya puedes montar tu numero de factura.
Cuando termines la factura, guarda los contadores de esta forma:
DoCmd.RunSQL "UPDATE [mtro contadores] " & _
"SET [AÑO]=" + Trim(Str([tmp_año])) + ", [num_albaran]=" & _
  Trim(Str([tmp_contador])) + ";"
Puede parecerte un poco lioso, pero sin código va a ser un poco imposible, como ya has podido comprobar. Pruébalo y te servirá para otras muchas cosas. Ya me dices algo
fcosapa
Muchas gracias por tu respuesta, la verdad que tiene muy buena pinta todo lo que dices, mañana lo pruebo y te digo algo por si no me sale bien y me puedes ayudar. Muchísimas gracias de nuevo y ya te digo mañana, ¿vale?
Muy buenas de nuevo, a ver, estoy intentando acoplar tu solución pero no ahí manera a ver si me puedes echar un cable por favor, y de nuevo muchas gracias por todo y por tu tiempo perdido en mi: A ver:
Me creado una tabla "contadores" con 2 campos numéricos AÑO y CONTADOR y cuando abro el formulario facturas intento hacer lo que dices pero me da errores.
A ver si me aclaro, en la variable [tmp_año] buscamos en la tabla contadores un año distinto de 0. y en la variable [tmp_contador] del mismo modo le metemos el valor del contador correspondiente al año.
¿En la variable alfcampo se meta el valor de fecha actual y en la variable [año_actual] se extrae el año (pero de un modo que no entiendo) no se podría hacer a través de la función year para extraer el año en curso?
Luego una condicional para ver si el año de la tabla de contadores es distinto al año actual que lo iguale y se pone el contador a 0 (se reinicia para cada año entiendo). Luego le suma 1 al contador para tener la factura 1 y sucesivas.
Luego cuando se tienen esos valores los tendría q concatenar en mi campo "id_factura" --> [tmp_año]&"/"&[tmp_contador] algo así no?
Luego lo ultimo para actualizar el contador tendría que al cerrar la factura que actualize la tabla de contadores (perdoname pero tampoco entiendo al 100% la consulta de actualización sobre la tabla de contadores)
Realmente es lo que busco pero no consigo solucionarlo (ya llevo un par de horas con ello). Si me pudiera aclarar estas cosillas, ya que aunque me defiendo un poquillo y hecho mis aplicaciones no llevo a ese nivel :)
Te agradezco en el alma lo que estas haciendo, muchas gracias de nuevo.
P.D: Si tienes algún ejemplo sencillo aunque sea en un formulario vacío con un campo código que consiga meter el código año/contador y me lo pudieras enviar te lo agradecería ([email protected]) o si me lo explicas un poco más detallademente para poder acoplar tu solución. Puedas o no puedas muchas gracias
Todo lo que has comentado es correcto.
He creado una tabla llamada CONTADORES, con dos campos numéricos AÑO y CONTADOR (la Ñ da problemas). Como valor inicial he puesto en año 2009 y en contador 100.
He creado un formulario con un text box y un botón. Cuando se pulsa el botón obtiene los datos de la tabla CONTADORES y pone en el tex box el resultado. El código adjunto al botón es el siguiente:
Private Sub Command1_Click()
On Error GoTo Err_Command1_Click
'
' definimos variables necesarias
'
Dim tmp_anyo As Single
Dim tmp_contador As Single
Dim alfcampo As Variant
Dim anyo_actual As Single
'
' Obtenemos valores de la tabla CONTADORES
'
tmp_anyo = DLookup("[anyo]", "contadores", "[anyo]<>0")
tmp_contador = DLookup("[CONTADOR]", "contadores", "[anyo]<>0")
'
alfcampo = CDate(Date)
anyo_actual = Val(Mid(alfcampo, 7, 4))
'
If tmp_anyo <> anyo_actual Then
tmp_anyo = anyo_actual
tmp_contador = 0
End If
'
tmp_contador = tmp_contador + 1
Me.Text2 = Str(tmp_anyo) + "/" + Str(tmp_contador)
'
' Actualizamos la tabla contadores para memorizar ultimos valores
'
sentencia_sql = "UPDATE [contadores] " & _
"SET [anyo]=" + Trim(Str([tmp_anyo])) + ", [contador]=" & _
Trim(Str([tmp_contador])) + ""
DoCmd.RunSQL (sentencia_sql)
Exit_Command1_Click:
Exit Sub
Err_Command1_Click:
MsgBox Err.Description
Resume Exit_Command1_Click
End Sub

Funciona bien. Simplemente cuando ejecuta sale un mensaje advirtiendo de que se va a actualizar un registro en la tabla contadores, dile que OK. Este mensaje se puede quitar pero no me acuerdo como se hace. Cuando llegue a casa puedo averiguartelo.
Un saludo,
fcosapa
Para evitar el mensaje de aviso que sale cuando se ejecuta el DOCMD. RUNSQL, debes de poner esto:
DoCmd.SetWarnings False
DoCmd.RunSQL sentencia_sql
DoCmd.SetWarnings True
Docmd. Setwarnings false desactiva la emisión de mensajes de aviso y con true lo vuelve a activar, de esta forma en el momento de ejecución del SQL no saldrán mensajes que despiste al usuario.
Si lo de desactivar los avisos ya lo había utilizado otras veces pero gracias también.
Por lo demás ahora sí lo tengo claro, muchísimas gracias una excelente solución

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas