5. Formateo y Validación.
5.1. Formateo.
Conceptos.
Formatear: Se refiere a la manera como se desplegaran los datos de un objeto.
Los objetos que se pueden formatear son: Data Fields o Columns (de una
Table Windows).
Formatear esta ligado en cierta forma al concepto de validación.
El formato depende del tipo de dato que un objeto contiene.
Se hace por medio del personalizador (Customizer).
5.1.1. Objetos tipo cadena.
Unformated Por omisión los datos del tipo cadena no se someten a ningún
formateo.
Invisible Se utiliza para la captura de datos que no serán visibles tales
como un Password.
Uppercase Cuando el dato capturado será almacenado exclusivamente en
mayúsculas.
Lowercase Cuando el dato capturado será almacenado exclusivamente en
minúsculas.
5.1.2. Objetos del tipo Date/Time y Number.
SQLWindows 90
Los formatos disponibles para los objetos Date/Time y Number se
encuentran en la sección Formats de las Global Declarations y se describen
en la imagen.
Los formatos para este tipo de datos son muy variados y SQLWindows
tiene definidos los más comunes, pero no son fijos, pueden ser modificados e
incluso se pueden definir nuevos formatos.
El formato definido se denomina Máscara, al especificar características
del objeto con el Customizer se asigna la máscara (Picture Formatting).
5.1.2.1. Formatos del tipo Date/Time.
Caracteres para máscaras del tipo Date/Time
SQLWindows 91
Caracter Descripción
M Mes : 1-12 ( sin ceros a la izquierda ).
MM Mes : 01-12 ( con ceros por la izquierda ).
MMM Mes : Jan-Dec ( las tres primeras letras en inglés ).
MMMM Mes : January-December ( nombre del mes completo en
inglés ).
d Día : 1-31 ( sin ceros a la izquierda ).
dd Día : 01-31 ( con ceros por la izquierda ).
ddd Día : Sun-Sat ( las tres primeras letras en inglés ).
dddd Día : Sunday-Saturday ( nombre del día completo en inglés ).
yy Año : 2 dígitos ( 95 ).
yyyy Año : 4 dígitos ( 1995 ).
hh Hora : formato de la hora en 12 horas.
hhhh Hora : formato de la hora en 24 horas.
mm Minutos : 0-59
ss Segundos : 0-59
mmmmmm Microsegundos : 000000-999999
AMPM Cadena internacional para AM o PM ( antes o después
meridiano ).
La máscara se arma utilizando los caracteres mostrados en la imagen
superior, si se utilizan otros caracteres, estos se utilizarán en forma literal al
formatear el dato, por ejemplo yy-mm-dd producirá resultados como: 94-01-
05 mientras que yymmdd no incluirá ningún separador 940105.
SQLWindows 92
Una vez definida la máscara, esta se asigna al objeto con el
Customizer.
5.1.2.2. Formatos del tipo Number
Caracteres para mascaras del tipo Number.
Caracter Uso
# Eliminación de ceros. SQLWindows no aumenta ceros a la
izquierda del punto decimal o a la derecha del mismo si la
cantidad de dígitos capturados es menor a la cantidad de #´s
definidas. El símbolo # puede ser colocado n cantidad de veces a
la izquierda del 0 ó del punto decimal y n cantidad de veces
después del 0 y después del punto decimal.
0 Llenado de ceros. SQLWindows aumenta la cantidad de ceros que
sean necesarios, en ambos lados del punto decimal, para cubrir
con al máscara definida por el usuario. Si el número capturado es
mayor a la máscara por la derecha del punto decimal,
SQLWindows redondea la cantidad. Si se captura más por la
izquierda, éstos son desplegados
, Separador de Miles. Despliega una coma ( , ) en el lugar donde fue
definida. Este caracter debe colocarse necesariamente cada tres
dígitos a la derecha del punto decimal.
Con estos caracteres se definen las máscaras para cantidades que
expresen dinero o cantidad, por ejemplo: $#,##0.00.
SQLWindows 93
Para incluir un caracter o varios caracteres en forma literal se deben
colocar entre comillas.
Definir un formato para Nuevos Pesos sería sencillo: ‘N$’#,##0.00.
Caracteres para mascaras del tipo Number (Continuación).
Caracter Uso
% Porcentaje. SQLWindows multiplica la cantidad por 100 y coloca
el signo de porcentaje si éste fue definido después del último 0.
$
Signo de Pesos. Despliega el caracter en la posición que se
indique, puede utilizarse en una posición fija o variable y no
debe usarse a la derecha del 0, # ó del punto decimal.
E+
e+
E-
e-
Notación Científica ( Exponencial ). Si el formato tiene un 0 ó #
después del caracter E ó e, SQLWindows desplegara el valor
numérico con notación científica. Ejemplos de esto es 0.00E+00
y 00.####e-00# .
. Punto Decimal. Auxiliados con los caracteres 0 y #, el punto
decimal determina la cantidad de caracteres por la derecha e
izquierda del mismo. Si sólo se definen caracteres a la derecha,
SQLWindows desplegará las cantidades empezando con un
punto y no aumentará el 0 por la izquierda, para evitar esto se
debe incluir un 0 por la izquierda del punto decimal.
* Caracter de Relleno. Repite el caracter tantas veces como sea
necesario para llenar la longitud del campo definida por el
usuario. Se debe colocar inmediatamente antes de primer # ó 0.
SQLWindows 94
; Se utiliza para separar dos formatos, mismos que serán aplicados
para los valores positivos y negativos respectivamente.
Solamente debe ser utilizado una vez en la máscara.
- Deja un espacio en blanco en lugar del caracter. Si se utiliza al
final del formato, utilice cualquier otro caracter enseguida del
mismo para que éste tenga efecto.
5.1.3. Input Mask.
Su tarea principal es: Validar los datos conforme el usuario los teclea.
Especifica el tipo de caracteres que el usuario debe teclear y si estos
no corresponden, genera un Beep.
Convierte de mayúsculas a minúsculas o viceversa según se requiera.
Inserta caracteres de separación en forma automática.
Pueden asignarse a un Combo Box, Data field ó Table Windows
Column.
Al igual que las máscaras para formatos, los Input Mask pueden
definirse en la sección Global Declarations, y para usarse sólo se asignan al
objeto que se desea.
Caracteres para definir un Input Mask.
X Cualquier Caracter.
! Cualquier Caracter pero en mayúsculas.
a Caracteres alfabéticos (A-Z, a-z ).
A Caracteres alfabéticos en mayúsculas.
9 Caracteres numéricos ( 0-9 ).
SQLWindows 95
n Caracteres alfanuméricos..
N Caracteres alfanuméricos en mayúsculas.
Ejemplo: 999-99-9999 acepta capturas como 123-45-67, el usuario no
necesita teclear los signos “ - ”, estos se insertan automáticamente conforme el
usuario teclea los números.
Se debe tener cuidado cuando se asigna formato e Input Mask a
objetos tipo Date-Time, no se pueden asignar máscaras con diferencia de
tamaño o distribución de caracteres. Por ejemplo si se define un Input Mask
99-99-99 no se puede asignar formato como dd-mm-yyyy, ello causará un
error en tiempo de ejecución.
Ejercicio.
En la aplicación de Control de Clientes ningún objeto tiene formato,
asigne los formatos:
1. RFC: en mayúsculas, tres letras, 6 dígitos, guión y tres alfanuméricos.
Localice el data field dfRFC, abra la ventana del customizer, seleccione la
opción Format y elija Uppercase, luego elija la opción Input Mask y teclee
AAA999999-NNN, y haga click en la opción Done.
SQLWindows 96
2. Razón: sólo Mayúsculas.
Localice el data field dfRazon, abra la ventana del customizer, seleccione la
opción Format y elija Uppercase, luego haga click en la opción Done.
3. Teléfono: sólo números, tres dígitos, guión, cuatro dígitos.
Localice el data field dfTelefono, abra la ventana del customizer, seleccione la
opción Input Mask y teclee 999-9999, luego haga click en la opción Done.
4. Prioridad: Un dígito sin decimales.
Localice el data field dfPrioridad, abra la ventana del customizer, seleccione la
opción Input Mask y teclee 9, luego haga click en la opción Done.
5. Fecha: en el formato día-mes-año, con dos dígitos para cada dato.
Localice el data field dfFecha abra la ventana del customizer, seleccione la
opción Format y teclee dd-MM-yy, luego elija la opción Input Mask y teclee
99-99-99, finalmente haga click en la opción Done.
5.2. Validación.
La validación automática puede ahorrar mucho trabajo al programar ya
que controla la validez de números y fechas, sin embargo en aplicaciones
reales es común que se necesiten validaciones especificas, así que en una
aplicación se pueden tener objetos con validación automática o personalizada
o ambas.
Conceptos.
SQLWindows 97
Validación automática para los objetos del tipo Number o
Date/Time.
Se dispara al momento de abandonar le objeto de estos tipos.
Si existe error en la información, SQLWindows no permite
abandonar el objeto.
En campos numéricos cualquier secuencia de caracteres numéricos es
válida. Si hay algún caracter alfabético en la captura se despliega un
mensaje.
5.2.1. Validación Automática.
Para campos de fecha/hora se efectúan los siguientes pasos (si se
cumple alguno, el campo se acepta).
1. En el WIN.INI sección [ intl ], se busca la declaración de fechas
cortas.
2. Se verifica por formato largo.
3. Se verifican los formatos estándares de SQL Windows:
MM d,yyyy
MMM dd,yyyy
MMMM d,yyyy
MMMM dd,yyyy
yyyy,MM-dd
d MMMM,yyyy
dd MMMM,yyyy
SQLWindows 98
4. Si el campo tiene máscara de fecha, se verifica contra estos formatos.
5. Si no se cumplió ninguno de los pasos anteriores, se envía un
mensaje de error.
5.2.2. Validación Personalizada.
La validación automática puede ser remplazada por una validación
propia atendiendo el mensaje SAM_Validate.
Dependiendo de si fue exitosa o no la validación personalizada, se debe
regresar un VALIDATE_Ok o un VALIDATE_Cancel.
Si no se regresa ningún valor, SQLWindows ejecuta la validación
automática.
Ejemplo:
En este ejemplo (vea la imagen ) cuando el usuario teclee en valor en el
Data Field y trate de pasar a otro objeto ( con el mouse o la tecla del
tabulador ), se enviara el mensaje SAM_Validate, si el valor que tiene
dfDescuento no cumple con la condición se regresa un valor
VALIDATE_Cancel, el cual impide que el usuario pase a otro objeto.
SQLWindows 99
Ejercicio.
1. Valide la prioridad entre 0 y 5.
En el Data Field dfPrioridad atienda el mensaje SAM_Validate.
2. Valide que la fecha de alta no sea mayor que la de hoy.
En el Data Field dfFechaAlta atienda el mensaje SAM_Validate.
SQLWindows 100
3. Pruebe la aplicación.
Nota. La función SalDateCurrent() proporciona la fecha del cliente, en un sistema real es
mejor utilizar la fecha del servidor para que todas las estaciones trabajen con el mismo
dato. En el caso SQLBase para obtener la fecha del servidor se debe hacer un query, por
ejemplo al momento de conectarse a la base de datos se podría ejecutar:
Call Sqllmmediate(‘Select distinct SYSDATE from Cliente into :dtFechaHoy’)
o bien
Call SqlPrepareAndExecute(hSqlWork,’ Select distinct SYSDATE from Cliente
into :dtFechaHoy’)
Call SqlFetchNext(hSqlWork)
En ambos casos Cliente es una tabla que existe en la base de datos, y
dfFechaHoy es una variable del tipo DateTime.
SQLWindows 101
Evaluación.
1. Los objetos que pueden someterse a formato son: _________________ y los
______________________.
2. Los objetos del tipo de String pueden tener un número ilimitado de formatos.
Cierto Falso
3. Los formatos predeterminados para datos del tipo String son:
_____________, _____________, ______________, y _________________.
4. Se pueden definir nuevas máscaras de formato en la sección
______________ que se encuentra dentro de la sección
___________________________.
5. Cuando se define un formato para números positivos y otro para números
negativos se debe utilizar el caracter __________________.
SQLWindows 102
6. Para máscaras de tipo Date/Time sólo se pueden utilizar los caracteres / y -
como separadores.
Cierto Falso
7. Cuando se asigna el formato Uppercase a un objeto, no se pueden teclear
minúsculas en ese objeto.
Cierto Falso
8. La diferencia entre usar # ó usar 0 en una máscara de tipo numérico es que la
primera no __________________________ mientras que en el otro caso si.
9. Para objetos del tipo _______________ y ________________se pueden
utilizar validación automática.
10. Para todos los objetos se puede utilizar la validación personalizada.
Cierto Falso
11. El mensaje SAM_Validate lo recibe un objeto cuando:
_____ El usuario hace una modificación al contenido del objeto.
_____ El suario pasa a otro objeto con el tabulador o el mouse.
_____ El usuario coloca el cursor en el objeto.
12. SQLWindows obliga al usuario a recapturar el dato cuando el objeto
regresa un valor ___________________ en atención del mensaje
_______________.
13. En el caso de no regresar ningún valor al atender el mensaje
SAM_Validate, SQLWindows utiliza _______________________.
SQLWindows 103
5. FORMATEO Y VALIDACIÓN.
5.1. Formateo.5.1.1. Objetos tipo cadena.5.1.2. Objetos del tipo Date/Time y Number.5.1.3. Input Mask.
5.2. Validación.5.2.1. Validación Automática.5.2.2. Validación Personalizada.
SQLWindows 104