[RESUELTO] Controlar Fechas en Campo de Texto

Discute sobre las herramientas de la base de datos
Responder
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

[RESUELTO] Controlar Fechas en Campo de Texto

Mensaje por HSEGROD »

Hola Gente...
No consigo terminar de Controlar un Campo de Texto en el que introduzco Fechas.
Lo primero que me preguntarán es pq no utilizo un Campo Fechas y es porque la gente de mi trabajo son muy cómodas y están acostumbradas a poner fechas en formato DDMMAA (sin las barras) y ese formato no lo reconoce el Campo Fecha, o eso creo (si me equivoco corregirme y creo que evitaremos quebraderos de cabeza.. :crazy: :crazy: ).

El asunto es que he controlado errores de introdución en las fechas:

Si Introduzco DDMMAA.............. Correcto (hago la transformación a DD/MM/AA y me lo valida como Correcto)

DD/MM/AA........... Correcto

FECHA SUP ACTUAL.... Me Detecta el error pero Pierde el Foco. o sea se va al campo siguiente en vez de quedarse en el Campo para volver a introducirlo

LETRAS.................... Detecta pero Pierde el Foco

Si dejo el CAMPO VACIO.... No Detecta

8 DÍGITOS.............. No Detecta

FECHA INVALIDA (mes 13, o día 35)... No Detecta


Bueno... os dejo el código a ver si alguien tiene más suerte que yooo.... :(

Código: Seleccionar todo


REM  *****  BASIC  *****

 REM ----------------------- En caso de Introducir la Fecha en tipo DDMMAA, Le insertaríamos las barras (/)
Sub FechaBarras (Evento)
	Dim SinBarras as String
	Dim oCtrl as Object
	Dim oForm as Object
	
	SinBarras = Evento.Source.Text

	if Len (SinBarras) = 6 or Len (SinBarras) = 8 then
	if Mid(SinBarras,3,1) = "/" and Mid (SinBarras,6,1) = "/" then GOTO SIGUECOMPROBANDO:  												' No realizo acción ya ya ya la fecha viene como DD/MM/AA
 	Evento.Source.Text = Left(SinBarras,2) + "/" + Mid(SinBarras,3,2) + "/" +  Right(SinBarras,2)	' Añado las Barras
	Else
		MsgBox ("Introduzca una FECHA VÁLIDA.", 16  ,  "SCS - HUMIC ©2018")
	    oSel = Evento.Source.Selection
  	    oSel.Min = 0
  	    oSel.Max = Len(Evento.Source.Text)
        Evento.Source.Selection = oSel
		Evento.Source.Text = ""
	
	End If
	
		 REM------------------ Comprobación de Fecha NO superior a la actual ------------------------------	
SIGUECOMPROBANDO:
		Fecha = Evento.Source.Text
		
		If Fecha > Date then
		msgbox ("Fecha (" & Fecha & ") Superior a la Actual (" & Format(Date, "dd/mm/yy") & ") NO ADMITIDA", 16 ,  "SCS - HUMIC ©2018")
	    oSel = Evento.Source.Selection
  	    oSel.Min = 0
  	    oSel.Max = Len(Evento.Source.Text)
        Evento.Source.Selection = oSel
		Evento.Source.Text = ""
		Exit Sub
		End If
		
	
End Sub
Gracias por adelantado... 8-)
Adjuntos
ControloFechas.7z
(10.14 KiB) Descargado 172 veces
Última edición por mauricio el Dom Abr 22, 2018 7:11 pm, editado 2 veces en total.
Razón: Marcar icono de resuelto
Apache OpenOffice 4.1.5 -- Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Controlar Fechas en Campo de Texto

Mensaje por Longi »

Buenas!

En un parcheo rápido te he añadido algunas líneas, pero el dejar en blanco el campo no creo conveniente que te de aviso, ya que, aunque hice pruebas, poniendo una minimacro en el evento 'al perder el foco', tiene el problema de que entras en un bucle hasta que metes una fecha que además ha de ser válida, y pudiera ser que no fuese la voluntad del que está tecleando.
También ten en cuenta que a lo mejor toda la macro debería ir a ese evento.
Otra cosa, acuerdate de poner el 'arreglo' para bisiestos, en lo referente a febrero.
Mira a ver si te funciona adecuadamente, ya digo que lo hice un tanto atropellado, pero podría valer:

Código: Seleccionar todo

Sub FechaBarras (Evento)
	Dim SinBarras as String
	Dim oCtrl as Object
	Dim oForm as Object
    oForm= Evento.Source.Model.Parent
	SinBarras = Evento.Source.Text

	if Len (SinBarras) = 6 or Len (SinBarras) = 8 then
	if Mid(SinBarras,3,1) = "/" and Mid (SinBarras,6,1) = "/" then GOTO SIGUECOMPROBANDO:  												' No realizo acción ya ya ya la fecha viene como DD/MM/AA
 	Evento.Source.Text = Left(SinBarras,2) + "/" + Mid(SinBarras,3,2) + "/" +  Right(SinBarras,2)	' Añado las Barras

    Mes= Cint(Mid(SinBarras,3,2))
    Dias= Cint(Left(SinBarras,2))
    
	If Mes>12 Then
	Msgbox "Mes no válido"
	Evento.Source.Text = ""
    oCtrl = oForm.GetByName("FechaNac")                                                      ' Control EXPEDIENTE
	oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                            ' Tenemos el control sobre el control
	oCtrl.SetFocus                                                                             ' Le ponemos el foco encima
	End if

    If (Mes=1 or Mes=3 or Mes=5 or Mes=7 or Mes=8 or Mes=10 or Mes=12) and Dias>31 Then
	Msgbox "Este mes no puede tener más de 31 días"
	Evento.Source.Text = ""
    oCtrl = oForm.GetByName("FechaNac")                                                      ' Control EXPEDIENTE
	oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                            ' Tenemos el control sobre el control
	oCtrl.SetFocus                                                                             ' Le ponemos el foco encima
	End if
	
    If (Mes=4 or Mes=6 or Mes=9 or Mes=11) and Dias>30 Then
	Msgbox "Este mes no puede tener más de 30 días"
	Evento.Source.Text = ""
    oCtrl = oForm.GetByName("FechaNac")                                                      ' Control EXPEDIENTE
	oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                            ' Tenemos el control sobre el control
	oCtrl.SetFocus                                                                             ' Le ponemos el foco encima
	End if

    If Mes=2  and Dias>28 Then
	Msgbox "Este mes no puede tener más de 28 días"
	Evento.Source.Text = ""
    oCtrl = oForm.GetByName("FechaNac")                                                      ' Control EXPEDIENTE
	oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                            ' Tenemos el control sobre el control
	oCtrl.SetFocus                                                                             ' Le ponemos el foco encima
	End if

	Else
		MsgBox ("Introduzca una FECHA VÁLIDA.", 16  ,  "SCS - HUMIC ©2018")
	    oSel = Evento.Source.Selection
  	    oSel.Min = 0
  	    oSel.Max = Len(Evento.Source.Text)
        Evento.Source.Selection = oSel
		Evento.Source.Text = ""
        oCtrl = oForm.GetByName("FechaNac")                                                      ' Control EXPEDIENTE
    	oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                            ' Tenemos el control sobre el control
    	oCtrl.SetFocus                                                                             ' Le ponemos el foco encima
	End If
	
		 REM------------------ Comprobación de Fecha NO superior a la actual ------------------------------	
SIGUECOMPROBANDO:
		Fecha = Evento.Source.Text

		If CDate(Fecha) > Date then
		msgbox ("Fecha (" & Fecha & ") Superior a la Actual (" & Format(Date, "dd/mm/yy") & ") NO ADMITIDA", 16 ,  "SCS - HUMIC ©2018")
	    oSel = Evento.Source.Selection
  	    oSel.Min = 0
  	    oSel.Max = Len(Evento.Source.Text)
        Evento.Source.Selection = oSel
		Evento.Source.Text = ""
        oCtrl = oForm.GetByName("FechaNac")                                                      ' Control EXPEDIENTE
    	oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                            ' Tenemos el control sobre el control
    	oCtrl.SetFocus                                                                             ' Le ponemos el foco encima
		Exit Sub
		End If
		
  ' Format(Now, "DDDD, dd/mm/yyyy")
	
End Sub

 REM --------------------------- Función para Evitar poner letras en el Campo --------------------------------
Function ContieneSoloLetrasyNumeros( dato As String ) As Boolean
   
   ' es solo un ejemplo. Esta función no está completa, ya que
   ' faltan letras acentuadas, signos aceptados, etc
   Dim n As Long, m As Integer, r As Boolean
   r = True
   For n=1 To Len( dato )
      m = Asc(Mid(dato,n,1))
      Select Case m
  '    	Case 32,44,46 ' espacio, coma, punto
  		Case 47      ' Barra (/)
    	Case 48 To 57 ' números del 0 al 9
  '     Case 65 To 90 ' letras A-Z
 '      Case 97 To 122 ' letras a-z
      ' faltan letras acentuadas, signos aceptados, etc
      ' si no es ninguno de los anteriores, es uno no aceptado
      ' salgo del bucle for y devuelvo false
      Case Else
         r = False
         Exit For
      End Select
   Next
   ContieneSoloLetrasyNumeros = r				' r=False (cualquier cosa que no sea numeros y Barra(/) --- r=True (números y Barra (/)
End Function
Otro saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

Re: Controlar Fechas en Campo de Texto

Mensaje por HSEGROD »

Longi.. Me alegran TUS PARCHEOS RÁPIDOS... porque.. "solucionan" el 98% de los Errores... :bravo: :bravo:

Solo me queda solucionar dos cositas.. ya que...

DDMMAA.............. Correcto
DD/MM/AA........... Correcto
FECHA SUP ACTUAL.... Correcto
LETRAS.................... Detecta pero Si Reincides Falla (y habrá quien reincida.. :knock: )
CAMPO VACIO.... Correcto
8 DÍGITOS.............. Depende de los Numeros (11111111 lo da como válido) (Sé que es dejarlo demasiado "Afinado" pero.. me gustaría que no sucediera)
FECHA INVALIDA (mes 13, o día 35)... Correcto

Con las letras... si las introduces varias veces (por cabezonería) me sale error TIPO DE DATO o Valor Inadmisible y se me abre la pantalla de Códigos en la línea

Código: Seleccionar todo

 If CDate(Fecha)>Date then
Lo de los bisiestos lo arreglaré cuando lo añada a MI BASE, y lo del evento lo intentaré poner todo en el evento MODIFICADO y así poner AL SALIR DEL FOCO la macro que me calcule la Edad.

Bueno... esta noche seguiré a ver si esos pequeños dos Fallos...

Otro Gran Un Saludito... :super:
Adjuntos
ControloFechas.7z
Adjunto ya modificado
(10.46 KiB) Descargado 179 veces
Apache OpenOffice 4.1.5 -- Windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Controlar Fechas en Campo de Texto

Mensaje por mauricio »

Simple es mejor que complejo, una fecha es una fecha, entiendo que se trata de ayudar al usuario, pero creo, reitero el creo, el usuario también tiene que aprender.

Si es una fecha, devuelve verdadero, cualquier otra cosa, falso.

Código: Seleccionar todo

Function esFecha(value)
	tmp = Mid(value, 1, 2) & "/" & Mid(value, 3, 2) & "/" & Mid(value, 5, 2) 
	esFecha = isDate(tmp)
End Function
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Controlar Fechas en Campo de Texto

Mensaje por Longi »

Qué bueno es seguir los consejos del que sabe....
En fín, a pesar de todo lo he hecho un poco largo de más (como si fuese firma del autor, qué le vamos a hacer!)
En las pruebas que he hecho va bien, pero ya se sabe...uno nunca hace suficientes pruebas.

Código: Seleccionar todo

Sub Barras2 (Evento)

    oForm= Evento.Source.Model.Parent
    SinBarras = Evento.Source.Text
    '-------------------------------------------------
    ' Según la longitud de lo que se ha puesto como fecha y la existencia o no de barras, tendremos un resultado u otro
    
	If Len(SinBarras)=0 Then Exit Sub                                                       ' Si no hay nada, nos echa de la macro

	if Len (SinBarras) = 6 or (Len (SinBarras) = 8 and Mid(SinBarras, 6, 1)<>"/")Then       ' Si tiene 6 caracteres o si tiene 8 y no tiene '/' en la posición 6
    tmp = Mid(SinBarras, 1, 2) & "/" & Mid(SinBarras, 3, 2) & "/" & Mid(SinBarras, (len(SinBarras)-1), 2) ' Valor de la variable tmp
    End if                                                                                  ' Acaba la condición
    
    if Len (SinBarras) = 8  and Mid(SinBarras, 6, 1)="/" Then                               ' Si tiene 8 caracteres y en la posición 6 tiene '/'
    tmp = SinBarras                                                                         ' Valor de la variable tmp
    End if                                                                                  ' Acabamos la condición
    
    If Len (SinBarras)=10 and Mid (SinBarras, 6, 1)="/" Then                                ' Si tiene 10 caracteres, y '/' en la posición 6
    tmp = Mid(SinBarras, 1, 6) & Mid(SinBarras, 9, 2)                                       ' Valor de la variable tmp
    End if                                                                                  ' Acaba la condición
    '---------------------------------------------------------
    ' Comprobamos si la variable tmp es una fecha
    
    If IsDate(tmp) = False Then                                                             ' Si no es una fecha                                               
    msgbox "Formato de fecha incorrecto!"                                                   ' Nos avisa
    oCtrl = oForm.GetByName("FechaNac")                                                     ' Control FechaNac
    oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                         ' Tenemos el control sobre el control
    oCtrl.SetFocus                                                                          ' Le ponemos el foco encima
    Evento.Source.Text=""                                                                   ' Lo vaciamos
    Exit sub                                                                                ' Nos echa de la macro
    Else                                                                                    ' Si sí que es fecha
    '-----------------------------------------------------------
    ' Comprobamos si estamos señalando una fecha superior a la del sistema
    
    if Clng(CDate(tmp))>Clng(Date) Then                                                     ' Si es mayor que la fecha actual
    msgbox ("Fecha (" & tmp & ") superior a la actual (" & Format(Date, "dd/mm/yy") & ") " & Chr(13) & "Acción no permitida!", 16 ,  "SCS - HUMIC ©2018")
    oCtrl = oForm.GetByName("FechaNac")                                                     ' Control FechaNac
    oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                         ' Tenemos el control sobre el control
    oCtrl.SetFocus                                                                          ' Le ponemos el foco encima
    Evento.Source.Text=""                                                                   ' Lo vaciamos
    Exit sub                                                                                ' Nos echa de la macro
    '----------------------------------------------------------
    ' Si no es una fecha superior a la del sistema (pero es fecha)
        
    Else
    Evento.Source.Text=  tmp                                                                ' Modificamos el valor a fecha corta 
    End if                                                                                  ' Acabamos la condición de que sea mayor que la fecha del sistema
    End if                                                                                  ' Acabamos la condición de que no sea fecha

End Sub
Ya contareis resultados!

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

Re: Controlar Fechas en Campo de Texto

Mensaje por HSEGROD »

Gracias Longi y Mauricio....

Pues.... Asimilando (copiando más bien :oops: ) y modificando "algo".... ya que se escapaban detalles, como Fechas de 8 dígitos qué cogía como válidas (por ej: 12120018 y las ponía como 12/12/18), El control de los días mayores de 31 o 30 según los meses (excepto los de Febrero que Milagrosamente controla hasta los bisiestos) ya lo tengo CASI ultimado... pero ... SE ESCAPA EL GRABARLO, ya que...

Si pongo directamente la fecha con las Barras.. Formato dd/mm/aa... graba la Fecha Bien y me calcula la EDAD
Si pongo la fecha sin las Barras, en el campo FechaNac se recalcula la fecha bien (con Barras) pero en la Tabla se guarda la fecha sin las barras (o sea como número) y... Por lo consiguiente no me calcula la EDAD y en los informes correspondientes (Etiquetas y Pulseras) sale otra fecha diferente que supongo será ESE NÚMERO GRABADO pasado a formato Fecha.... :crazy: :crazy: Me he enrrolladooooo??


Supongo que solo le falta alguna sentencia que grabe ... pero no doy con ella ...
He probado al final varias sentencias que creía me iban a ayudar pero..no me funcionan

Código: Seleccionar todo

  '  oForm=Evento.Source.Model.Parent                                                           ' Formulario afectado
   ' oCtrl = oForm.getByName("FechaNac")                                                        ' Control fecha
  '  oCtrl.BoundField.UpdateString															   ' Ponemos la fecha
  '    If oForm.IsModified  or oForm.IsNew Then oForm.UpdateRow  

	'  If oForm.IsNew Then oForm.InsertRow Else oForm.UpdateRow
Mejor.... Subo la Base completa.... y mirais :ucrazy:
(La macro de Longi (Barras2) la he Renombrado a... "ValidoFechas" (en el Modulo2)

Graciasssss.... 8-)
Adjuntos
DragoOpenOffice.7z
(120.68 KiB) Descargado 173 veces
Apache OpenOffice 4.1.5 -- Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Controlar Fechas en Campo de Texto

Mensaje por Longi »

Buenas!
En mis pruebas el tema de los días superiores a 30 o 31 funcionaba bien, pero como veas.
En cuanto a la pregunta última tienes que substituir las líneas siguientes:(estaban al final del código último que colgué)

Código: Seleccionar todo

    Else
    Evento.Source.Text=  tmp                                                                ' Modificamos el valor a fecha corta 
    End if                                                                                  ' Acabamos la condición de que sea mayor que la fecha del sistema
    End if                                                                                  ' Acabamos la condición de que no sea fecha

Por estas otras:

Código: Seleccionar todo

    Else
    oForm.getByName("FechaNac").BoundField.UpdateString(tmp)                                                        ' Control fecha
    Exit sub
    End if                                                                                  ' Acabamos la condición de que sea mayor que la fecha del sistema
    End if                                                                                  ' Acabamos la condición de que no sea fecha
Así ya te coge la fecha sin problemas.

Otro saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

Re: Controlar Fechas en Campo de Texto

Mensaje por HSEGROD »

A ver.. A ver.... alguien me puede explicar como... LEVANTAR UN MONUMENTO AL GRAN LONGI...?? :bravo: :bravo: :bravo:

Creo que ya no se me escapa nada en ese control Fecha...

Pongo el código completo por si alguien lo necesitara en algún momento....

Código: Seleccionar todo


 	Sub ValidoFechas (Evento)   ' ------------------ By Longi (no podía ser menos) -------------------------

    oForm= Evento.Source.Model.Parent
    SinBarras = Evento.Source.Text
    '-------------------------------------------------
    ' Según la longitud de lo que se ha puesto como fecha y la existencia o no de barras, tendremos un resultado u otro
    
   If Len(SinBarras)=0 Then Exit Sub                                                       ' Si no hay nada, nos echa de la macro

   if Len (SinBarras) = 6 	Then     												       ' Si tiene 6 caracteres 
    tmp = Mid(SinBarras, 1, 2) & "/" & Mid(SinBarras, 3, 2) & "/" & Mid(SinBarras, (len(SinBarras)-1), 2) ' Valor de la variable tmp
    End if                                                                                  ' Acaba la condición
    
    if Len (SinBarras) = 8  and Mid(SinBarras, 6, 1)="/"  and Mid (Sinbarras, 3, 1)="/" Then       ' Si tiene 8 caracteres y en la posición 3 y 6 tiene '/'
    tmp = SinBarras                                                                         ' Valor de la variable tmp
    End if                                                                                  ' Acabamos la condición
    
 '   If Len (SinBarras)=10 and Mid (SinBarras, 6, 1)="/" Then                                ' Si tiene 10 caracteres, y '/' en la posición 6
 '   tmp = Mid(SinBarras, 1, 6) & Mid(SinBarras, 9, 2)                                       ' Valor de la variable tmp
 '   End if                                                                                  ' Acaba la condición
    '---------------------------------------------------------
    ' Comprobamos si la variable tmp es una fecha
    
    If IsDate(tmp) = False Then                                                             ' Si no es una fecha                                               
    Msgbox  ("Formato de Fecha INCORRECTO.", 16  ,  "SCS - HUMIC ©2018")                    ' Nos avisa
    oCtrl = oForm.GetByName("FechaNac")                                                     ' Control FechaNac
    oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                         ' Tenemos el control sobre el control
    oCtrl.SetFocus                                                                          ' Le ponemos el foco encima
    Evento.Source.Text=""                                                                   ' Lo vaciamos
    Exit sub                                                                                ' Nos echa de la macro
    Else                                                                                    ' Si sí que es fecha
    '-----------------------------------------------------------
    ' Comprobamos si estamos señalando una fecha superior a la del sistema
    
    if Clng(CDate(tmp))>Clng(Date) Then                                                     ' Si es mayor que la fecha actual
    msgbox ("Fecha (" & tmp & ") superior a la actual (" & Format(Date, "dd/mm/yy") & ") " & Chr(13) & "Acción no permitida!", 16 ,  "SCS - HUMIC ©2018")
    oCtrl = oForm.GetByName("FechaNac")                                                     ' Control FechaNac
    oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                         ' Tenemos el control sobre el control
    oCtrl.SetFocus                                                                          ' Le ponemos el foco encima
    Evento.Source.Text=""                                                                   ' Lo vaciamos
    Exit sub                                                                                ' Nos echa de la macro
    '----------------------------------------------------------
    ' Si no es una fecha superior a la del sistema (pero es fecha)
        
       Else
        oForm.getByName("FechaNac").BoundField.UpdateString(tmp)                                ' Grabamos el Contenido del Control FechaNac
        Exit sub
        End if                                                                                  ' Acabamos la condición de que sea mayor que la fecha del sistema
        End if                                                                                  ' Acabamos la condición de que no sea fecha

	REM ------------ Sigo comprobando los dias Para que no EXCEDAN de los correspondientes a cada mes --------------------------
	
	 Mes= Cint(Mid(Evento.Source.Text,4,2))
     Dias= Cint(Left(Evento.Source.Text,2))


    
   If Mes>12 Then
   Msgbox ("Mes No Válido.", 16  ,  "SCS - HUMIC ©2018")
   Evento.Source.Text = ""
   oCtrl = oForm.GetByName("FechaNac")                                                        ' Control FechaNac
   oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                            ' Tenemos el control sobre el control
   oCtrl.SetFocus                                                                             ' Le ponemos el foco encima
   End if

    If (Mes=1 or Mes=3 or Mes=5 or Mes=7 or Mes=8 or Mes=10 or Mes=12) and Dias>31 Then
   Msgbox  ("Este mes no puede tener más de 31 días.", 16  ,  "SCS - HUMIC ©2018")
   Evento.Source.Text = ""
   oCtrl = oForm.GetByName("FechaNac")                                                        ' Control FechaNac
   oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                            ' Tenemos el control sobre el control
   oCtrl.SetFocus                                                                             ' Le ponemos el foco encima
   End if
   
    If (Mes=4 or Mes=6 or Mes=9 or Mes=11) and Dias>30 Then
   Msgbox  ("Este mes no puede tener más de 30 días.", 16  ,  "SCS - HUMIC ©2018")
   Evento.Source.Text = ""
   oCtrl = oForm.GetByName("FechaNac")                                                        ' Control FechaNac
   oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                            ' Tenemos el control sobre el control
   oCtrl.SetFocus                                                                             ' Le ponemos el foco encima
   End if

End Sub

Doy otra vez.. miles de gracias al foro... y doy por RESUELTO el Hilo....

Saludos... 8-)
Apache OpenOffice 4.1.5 -- Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: [RESUELTO] Controlar Fechas en Campo de Texto

Mensaje por Longi »

Buenas!
Detecté el otro día un 'pequeño' problema con la sistemática utilizada, y es que la gente de 89 años o más no tiene derecho a asistencia clínica, ya que si le aplicas la fecha de nacimiento que le toca, te lo considera como nacimiento en fecha posterior al día que tiene el sistema. Esto se debe a que sólo se pueden introducir fechas en formato corto, y cuando te pasas del año 2018 (18), pasa a ser el 2019 (19), cuando en realidad el señor nació en el 1919 (19 también).
Hice modificaciones, de tal manera que admite fechas cortas con separador("/") y sin él, pero también admite fechas largas con y sin separador.
En el cálculo final, en vez de grabar fecha corta, graba fecha larga, y en caso de teclear el año en fecha corta, te advierte de la edad que estás queriendo meter si ocurre lo de que te pasas de año, y si quieres seguir o abandonar.
El defecto ( que pudiera ser asumible), es en el caso de que tenga un nacimietno en el 1919 posteriro a la fecha de hoy. En este caso, con la fecha corta te da un aviso de fecha superior a la del sistema, por lo que no te deja seguir. Sin embargo, tenemos la opción de meter la fecha larga, tanto con barras como sin ellas, y lo admite sin más problemas. (ya te coge que es el 1919)
No parece necesario el intentar distinguir entre meses de 30 o 31 días, ya que la función 'IsDate' ya lo discierne sin problema (o eso parece).
En fin, que creo que sería conveniente considerar y hacer pruebas con este otro código que añado:

Código: Seleccionar todo

Sub ValidoFechasN (Evento)

    oForm= Evento.Source.Model.Parent
    SinBarras = Evento.Source.Text
    '-------------------------------------------------
    ' Según la longitud de lo que se ha puesto como fecha y la existencia o no de barras, tendremos un resultado u otro
  
	If Len(SinBarras)=0 Then Exit Sub                                                       ' Si no hay nada, nos echa de la macro
    '---------------------------------------------
    ' Si lo que se escribe tiene solo 6 caracteres
        
	if Len (SinBarras) = 6 Then                                                             ' Si solo son 6 caracteres
	if Right(SinBarras,2) >Right(Date,2) Then                                               ' Si el año es superior al actual
        Respuesta=	msgbox ("La persona se grabará con nacimiento el año " & 19 & Right(SinBarras,2) & Chr(13) & "¿Desea continuar?",52, "¡ATENCIÓN!" )    ' Nos avisa
        if Respuesta=6 Then                                                                 ' Si decimos que si
         tmp = Mid(SinBarras, 1, 2) & "/"& Mid(SinBarras, 3, 2) & "/"& 19 & Right(SinBarras,2)' Pone la variable tmp en su valor                                                                      ' Valor de la variable tmp
        Else                                                                                ' Si decimos que no
         oCtrl = oForm.GetByName("FechaNac")                                                ' Control FechaNac
         oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                    ' Tenemos el control sobre el control
         oCtrl.SetFocus                                                                     ' Le ponemos el foco encima
         Evento.Source.Text=""                                                              ' Lo vaciamos
         Respuesta=0                                                                        ' Colocamos la variable 'Respuesta' como no operativa
         Exit sub                                                                           ' Nos echa de la macro
        End if                                                                              ' Acabamos la condición de respuesta
	Else                                                                                    ' Si el año es menor o igual
	tmp= Mid(SinBarras, 1, 2) & "/" & Mid(SinBarras, 3, 2) & "/" & 20 & Right(SinBarras,2)  ' La variable es distinta                                                       ' Si tiene 6 caracteres o si tiene 8 y no tiene '/' en la posición 6
    End if                                                                                  ' Acaba la condición del año
    End if                                                                                  ' Acaba la condición de la longitud
    '-----------------------------------------------------------------------------
    ' Si tiene 8 caracteres puede ser porque tenga barras, o porque si no las tiene se ha puesto el año completo
  
    if Len (SinBarras) = 8 Then                                                             ' Si son 8 caracteres
    '----------------------------------------------------------
    ' Número de año incompleto (solo las dos últimas cifras)
    
      if Mid(SinBarras, 3, 1)="/" and Mid(SinBarras, 6, 1)="/" Then                         ' Si tiene 8 caracteres y en la posición 3 y 6 tiene '/'
    	if Right(SinBarras,2) >Right(Date,2) Then                                           ' Si el año señalado es superior al del sistema
        Respuesta=	msgbox ("La persona se grabará con nacimiento el año " & 19 & Right(SinBarras,2) & Chr(13) & "¿Desea continuar?",52, "¡ATENCIÓN!" )    ' Nos avisa
        if Respuesta=6 Then                                                                 ' Si decimos que si
         tmp = Mid(SinBarras, 1, 6) & 19 & Right(SinBarras,2)                               ' Pone la variable tmp en su valor                                                                      ' Valor de la variable tmp
        Else                                                                                ' Si decimos que no
         oCtrl = oForm.GetByName("FechaNac")                                                ' Control FechaNac
         oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                    ' Tenemos el control sobre el control
         oCtrl.SetFocus                                                                     ' Le ponemos el foco encima
         Evento.Source.Text=""                                                              ' Lo vaciamos
         Respuesta=0                                                                        ' Colocamos la variable 'Respuesta' como no operativa
         Exit sub                                                                           ' Nos echa de la macro
        End if                                                                              ' Acabamos la condición de respuesta
        Else                                                                                ' En caso de que sea menor o igual (el año)
        tmp = Mid(SinBarras, 1, 6) & 20 & Right(SinBarras,2)                                ' La variable tmp tendrá otro valor
        End if                                                                              ' Acabamos la condición de año
      End if                                                                                ' Acabamos la condición de barras
    '----------------------------------------------------------
    ' Número de año completo
    
      if Mid(SinBarras, 3, 1)<>"/" and Mid(SinBarras, 6, 1)<>"/" Then                       ' Si tiene 8 caracteres y en las posiciónes 3 y 6 no tiene '/'
       If Cint(right(SinBarras,4))< (Cint(right(Date, 4))-120) Then                         ' Si se teclea para 120 años
       msgbox "Según la fecha anotada, el paciente tiene más de 120 años. Habría que teclear de nuevo" ' Nos aisa
       oCtrl = oForm.GetByName("FechaNac")                                                  ' Control FechaNac
       oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                      ' Tenemos el control sobre el control
       oCtrl.SetFocus                                                                       ' Le ponemos el foco encima
       Evento.Source.Text=""                                                                ' Lo vaciamos
       Exit sub                                                                             ' Nos echa de la macro
       End if                                                                               ' Acabamos con la condición de los 120 años
       tmp = Mid(SinBarras, 1, 2) & "/" & Mid(SinBarras, 3, 2) & "/" & Right(SinBarras,4)   ' Valor de la variable tmp
      End if                                                                                ' Acabamos la condición de barras
    End if                                                                                  ' Acabamos la condición de longitud
    '------------------------------------------
    ' En el caso de que haya 10 caracteres
    
    if Len(SinBarras)=10 Then                                                               ' Si se han tecleado 10 caracteres
    '----------------------------------------------
    ' Chequeamos que tenga formato correcto
    
      if Mid(SinBarras, 3, 1)<>"/" or Mid(SinBarras, 6, 1)<> "/" Then                       ' Si tiene 10 caracteres y en las posiciones 3 o 6 no tiene '/'
       msgbox "Formato no permitido"                                                        ' Nos avisa                 
       oCtrl = oForm.GetByName("FechaNac")                                                  ' Control FechaNac
       oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                      ' Tenemos el control sobre el control
       oCtrl.SetFocus                                                                       ' Le ponemos el foco encima
       Evento.Source.Text=""                                                                ' Lo vaciamos
       Exit sub                                                                             ' Nos echa de la macro
      End if                                                                                ' Acaba la condición de barras
    '------------------------------------------------
    ' Si las barras están en su sitio, el año siempre ha de estar completo
    
      if Mid(SinBarras, 3, 1)="/" and Mid(SinBarras, 6, 1)= "/" Then                        ' Si tiene 10 caracteres y en las posiciones 3 y 6 tiene '/'
    '---------------------------------------------------------
    ' Si el año es superior al del sistema
    
       If Cint(right(SinBarras,4))> (Cint(right(Date, 4))) Then                             ' Si el año es superior al actual
       msgbox "Estás intentando grabar una fecha superior a la del sistema"                 ' Nos avisa                 
       oCtrl = oForm.GetByName("FechaNac")                                                  ' Control FechaNac
       oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                      ' Tenemos el control sobre el control
       oCtrl.SetFocus                                                                       ' Le ponemos el foco encima
       Evento.Source.Text=""                                                                ' Lo vaciamos
       Exit sub                                                                             ' Nos echa de la macro
       End if                                                                               ' Acaba la condición
    '--------------------------------------------------------
    ' Si la edad va a ser superior a 120 años
    
       If Cint(right(SinBarras,4))< (Cint(right(Date, 4))-120) Then                         ' Si tiene más de 120 años
       msgbox "Según la fecha anotada, el paciente tiene más de 120 años. Habría que teclear de nuevo" ' Nos avisa
       oCtrl = oForm.GetByName("FechaNac")                                                  ' Control FechaNac
       oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                      ' Tenemos el control sobre el control
       oCtrl.SetFocus                                                                       ' Le ponemos el foco encima
       Evento.Source.Text=""                                                                ' Lo vaciamos
       Exit sub                                                                             ' Nos echa de la macro
       End if                                                                               ' Acabamos la condición de años
    tmp = Mid(SinBarras, 1, 6) & Mid(SinBarras, 7, 4)                                       ' Valor de la variable tmp
    End if                                                                                  ' Acaba condición
    End if                                                                                  ' Acaba la condición
    '---------------------------------------------------------
    ' Comprobamos si la variable tmp es una fecha

    If IsDate(tmp) = False Then                                                             ' Si no es una fecha                                               
    msgbox "Formato de fecha incorrecto!"                                                   ' Nos avisa
    oCtrl = oForm.GetByName("FechaNac")                                                     ' Control FechaNac
    oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                         ' Tenemos el control sobre el control
    oCtrl.SetFocus                                                                          ' Le ponemos el foco encima
    Evento.Source.Text=""                                                                   ' Lo vaciamos
    Exit sub                                                                                ' Nos echa de la macro
    Else                                                                                    ' Si sí que es fecha
    '-----------------------------------------------------------
    ' Comprobamos si estamos señalando una fecha superior a la del sistema

    if Clng(CDate(tmp))>Clng(Date) Then                                                     ' Si es mayor que la fecha actual
    msgbox ("Fecha (" & tmp & ") superior a la actual (" & Format(Date, "dd/mm/yy") & ") " & Chr(13) & "Acción no permitida!", 16 ,  "SCS - HUMIC ©2018")
    oCtrl = oForm.GetByName("FechaNac")                                                     ' Control FechaNac
    oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                         ' Tenemos el control sobre el control
    oCtrl.SetFocus                                                                          ' Le ponemos el foco encima
    Evento.Source.Text=""                                                                   ' Lo vaciamos
    Exit sub                                                                                ' Nos echa de la macro
    End if                                                                                  ' Acabamos condición de fecha mayor que la del sistema
    End if                                                                                  ' Acabamos la condición de que sea mayor que la fecha del sistema
    '----------------------------------------------------------
    ' Si no es una fecha superior a la del sistema (pero es fecha), o es fecha admitida
 
    oForm.getByName("FechaNac").BoundField.UpdateString(tmp)                                ' Control fecha graba la fecha de nacimiento

End Sub
Otro saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

Re: [RESUELTO] Controlar Fechas en Campo de Texto

Mensaje por HSEGROD »

Vamos.... esto se llama... Profesionalidad al máxmo...
Desde que puedo lo implemento y comento...
UN millón de gracias....
Apache OpenOffice 4.1.5 -- Windows 10
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

Re: [RESUELTO] Controlar Fechas en Campo de Texto

Mensaje por HSEGROD »

Comprobado y... genial...

Sólo queda un ancho de banda que va desde UNA FECHA SUPERIOR hasta INICIO 2019 que si suponemos que es una persona mayor nacida el 30 de noviembre de 1918 e introducimos la fecha como 301118 ya la da como superior (erronea) y no pregunta si es paciente de 1918, cosa que no ocurre si la introducimos como 30/11/1918 que SI LA DA COMO VÁLIDA Y CORRECTA... por lo cual ya me vale.

Yo lo doy como MAS QUE PERFECTO, y agradezco enormemente tu ayuda...

Para zanjarlo de todo, pero no sé si Tendría que abrir otro hilo, (ya los moderadores me avisarán) es que... El Campo EDAD hace perfectamente su cometido... e incluso me marca EN UN COLOR DETEMINADO (amarillo) los pacientes mayores de 13 años, pero sólo cuando se CREA EL REGISTRO y no cada vez que se entra en un paciente de esas caracteristicas...

Se que es algo así:


oForm=Evento.Source.Model.Parent
if oForm.getByName("FechaNac").Text = "" then exit sub
Fecha = CDate(oForm.getByName("FechaNac").Boundfield.String )
A= year(NOW())-Year(Fecha)
IF A >13 then
oCtrl.BackgroundColor = RGB(247,255,0) 'Ponemos de fondo Amarillo si es mayor de 13 años
else
oCtrl.BackgroundColor = RGB(255,204,153) 'Ponemos de fondo el color predeterminado (Naranja10)
end if

Pero no sé en que EVENTO lo tengo que poner para que me lo detecte cuando se cambia de registro...

alguna idea..??

Saluditos... 8-)
Apache OpenOffice 4.1.5 -- Windows 10
mriosv
Mensajes: 2335
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: [RESUELTO] Controlar Fechas en Campo de Texto

Mensaje por mriosv »

En Menú/Herramientas/Opciones/OpenOffice/General - Año (con dos dígitos), si fija como son interpretados los años cuando solo se introducen dos dígitos.
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice (Win10x64)
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: [RESUELTO] Controlar Fechas en Campo de Texto

Mensaje por RMG »

Hola,

Te has contestado tu mismo, en el evento tras cambio de registro, donde calculas los años y dias. Además de donde insertas el registro.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

Re: [RESUELTO] Controlar Fechas en Campo de Texto

Mensaje por HSEGROD »

Ufff. qué torpe soy...
Creo que ya lo había puesto en ese EVENTO (Al cambiar de Registro) y que no me había funcionado... pero ahora... Milagrosamente FUNCIONA GENIAL....

No sabeis la ayuda que me estais ofreciendo y la fuente de sabiduria que dais... :bravo: :bravo:

Saludos... 8-)
Apache OpenOffice 4.1.5 -- Windows 10
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

Re: [RESUELTO] Controlar Fechas en Campo de Texto

Mensaje por HSEGROD »

Aqui ... la base completa... :super:
Adjuntos
SoloInformes.7z
Áñadir los informes a la Base "DragoOpenOffice_SIN_INFORMES"
(89.88 KiB) Descargado 172 veces
DragoOpenOffice SIN_INFORMES.7z
(122.82 KiB) Descargado 181 veces
Apache OpenOffice 4.1.5 -- Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: [RESUELTO] Controlar Fechas en Campo de Texto

Mensaje por Longi »

Añadamos un parche al hueco que hay entre hoy y el año que viene:
Teóricamente, y repito, teóricamente tiene en cuenta si es el mes actual o superior. Dentro del mes actual también si es el día actual o superior, avisando que quedará con 99 años. meses y días correspondientes.
Si el día es el de hoy, con fecha corta te deja escoger si lo dejas en 100 años o en 0 días (felicitando y todo, como también ocurre con fecha de 8 o de 10 dígitos).
Todo esto ha generado un monstruo que cualquiera que tenga dos dedos de frente lo habría hecho de otro modo, pero uno se va liando.. se va liando.... y la lía!
Tener en cuenta que siempre serán pocas las pruebas que haya hecho, así que al ir a probar usad el casco, las gafas de soldar, la mascarilla, cerrad los ojos con fuerza, torced la cara y....apretad 'Intro'.
Después ya me contareis a qué distancia quedaron los trozos de ordenador y cuantos cristales rompieron!

El código que dejo es para sustituir la parte final, donde dice algo así como 'comprobamos si la fecha es superior a la actual':

Código: Seleccionar todo

        '-----------------------------------------------------------
        ' Comprobamos si estamos señalando una fecha superior a la del sistema

        if Clng(CDate(tmp))>=Clng(Date) Then                                                    ' Si es mayor o igual a la fecha actual
          
        if (Clng(CDate(tmp))=Clng(Date) and Len(SinBarras)=8) Then                              ' Si es igual que la fecha actual y longitud 8
            Respuesta=   msgbox ("Es el día de hoy!!!."& Chr(13) & "Feliz nacimiento!", "¡ATENCIÓN!" )' Nos avisa
            tmp = Mid(SinBarras, 1, 2) & "/"& Mid(SinBarras, 3, 2) & "/"& Right(SinBarras,4)    ' Variable tmp
            oForm.getByName("FechaNac").BoundField.UpdateString(tmp)                            ' Control fecha graba la fecha de nacimiento
         Exit sub                                                                               ' Nos echa de la macro
        End if                                                                                  ' Acabamos la condición de longitud=8
        
        if (Clng(CDate(tmp))=Clng(Date) and Len(SinBarras)=10) Then                             ' Si es igual a la fecha actual y longitud 10
            Respuesta=   msgbox ("Es el día de hoy!!!."& Chr(13) & "Feliz nacimiento!", "¡ATENCIÓN!" )' Nos avisa
            tmp = SinBarras                                                                     ' Pone la variable tmp en su valor                                                                      ' Valor de la variable tmp
            oForm.getByName("FechaNac").BoundField.UpdateString(tmp)                            ' Control fecha graba la fecha de nacimiento
            Exit sub                                                                            ' Nos echa de la macro                                 
        End if                                                                                  ' Acabamos la condición de longitud
        '---------------------------------------------------------
        ' 6 caracteres
        
        if Len(SinBarras)=6 Then
        '----------------------------------------------------------
        ' Si el mes es mayor que el actual
        
          If (Cint(Mid(SinBarras,3,2))>Cint(Mid(Date,4,2))) Then                               ' Si el mes es mayor que el actual  
            Respuesta=   msgbox ("Mes superior al actual."& Chr(13) & "La persona se grabará con nacimiento el año " & 19 & Right(SinBarras,2) & Chr(13) & "¿Desea continuar?",52, "¡ATENCIÓN!" )    ' Nos avisa
            if Respuesta=6 Then                                                                 ' Si decimos que si
             tmp = Mid(SinBarras, 1, 2) & "/"& Mid(SinBarras, 3, 2) & "/"& 19 & Right(SinBarras,2)' Pone la variable tmp en su valor                                                                      ' Valor de la variable tmp
            Else                                                                                ' Si decimos que no
             oCtrl = oForm.GetByName("FechaNac")                                                ' Control FechaNac
             oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                    ' Tenemos el control sobre el control
             oCtrl.SetFocus                                                                     ' Le ponemos el foco encima
             Evento.Source.Text=""                                                              ' Lo vaciamos
             Respuesta=0                                                                        ' Colocamos la variable 'Respuesta' como no operativa
             Exit sub                                                                           ' Nos echa de la macro
            End if                                                                              ' Acabamos la condición de respuesta
        Else                                         
     '------------------------------------------------------------------
     ' Si es el mismo día escogemos entre nacimiento hoy o hace 100 años
     
         If (Cint(left(SinBarras,2))=Cint(left(Date,2))) Then                                   ' El mismo día de hoy
            Respuesta=   msgbox ("Es el día de hoy!!!."& Chr(13) & "La persona se grabará con nacimiento el año " & 19 & Right(SinBarras,2) & Chr(13) & "Si lo rechaza se grabará con la fecha de hoy!",52, "¡ATENCIÓN!" )    ' Nos avisa
            if Respuesta=6 Then                                                                 ' Si decimos que si
             tmp = Mid(SinBarras, 1, 2) & "/"& Mid(SinBarras, 3, 2) & "/"& 19 & Right(SinBarras,2)' Pone la variable tmp en su valor                                                                      ' Valor de la variable tmp
            Else                                                                                ' Si decimos que no
             msgbox "¡Feliz nacimiento!!"                                                       ' Aviso
             tmp = Mid(SinBarras, 1, 2) & "/"& Mid(SinBarras, 3, 2) & "/"& 20 & Right(SinBarras,2) ' Variable tmp                                                             ' Lo vaciamos
             Respuesta=0                                                                        ' Colocamos la variable 'Respuesta' como no operativa
            End if                                                                              ' Acabamos la condición de respuesta
        Else  
         
          If (Cint(left(SinBarras,2))>Cint(left(Date,2))) Then                                 ' Si el mes es mayor que el actual  
            Respuesta=   msgbox ("Día superior al actual dentro de este mes."& Chr(13) & "La persona se grabará con nacimiento el año " & 19 & Right(SinBarras,2) & Chr(13) & "¿Desea continuar?",52, "¡ATENCIÓN!" )    ' Nos avisa
            if Respuesta=6 Then                                                                 ' Si decimos que si
             tmp = Mid(SinBarras, 1, 2) & "/"& Mid(SinBarras, 3, 2) & "/"& 19 & Right(SinBarras,2)' Pone la variable tmp en su valor                                                                      ' Valor de la variable tmp
            Else                                                                                ' Si decimos que no
             oCtrl = oForm.GetByName("FechaNac")                                                ' Control FechaNac
             oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                    ' Tenemos el control sobre el control
             oCtrl.SetFocus                                                                     ' Le ponemos el foco encima
             Evento.Source.Text=""                                                              ' Lo vaciamos
             Respuesta=0                                                                        ' Colocamos la variable 'Respuesta' como no operativa
             Exit sub                                                                           ' Nos echa de la macro
            End if                                                                              ' Acabamos la condición de respuesta
         End if
        End if                                         
    End if
  Else

        msgbox ("Fecha (" & tmp & ") superior a la actual (" & Format(Date, "dd/mm/yy") & ") " & Chr(13) & "Acción no permitida!", 16 ,  "SCS - HUMIC ©2018")
        oCtrl = oForm.GetByName("FechaNac")                                                     ' Control FechaNac
        oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)                         ' Tenemos el control sobre el control
        oCtrl.SetFocus                                                                          ' Le ponemos el foco encima
        Evento.Source.Text=""                                                                   ' Lo vaciamos
        Exit sub                                                                                ' Nos echa de la macro
        End if                                                                                  ' Acabamos condición de fecha mayor que la del sistema
        End if                                                                                  ' Acabamos la condición de que sea mayor que la fecha del sistema
End if
        '----------------------------------------------------------
        ' Si no es una fecha superior a la del sistema (pero es fecha), o es fecha admitida

        oForm.getByName("FechaNac").BoundField.UpdateString(tmp)                                ' Control fecha graba la fecha de nacimiento

    End Sub
Ya direis!

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
HSEGROD
Mensajes: 53
Registrado: Mié Mar 14, 2018 4:25 pm

Re: [RESUELTO] Controlar Fechas en Campo de Texto

Mensaje por HSEGROD »

Nada.. nada... mi ordenador... NI HA ESTALLADO NI NADA ... Jjjj :lol: :lol:

Cada vez más mejorada esta Rutina de Control de Fechas... ya no se le escapa ni un detalle... :bravo:

Cuando ya la implemente en el trabajo es cuando de verdad se puede ver si hay algún caso aislado... pero por ahora... INMEJORABLE...

Gracias a todos, sobre todo a LONGI por su inestimable aportación... :bravo: :bravo:

Saludos 8-)
Apache OpenOffice 4.1.5 -- Windows 10
Responder