jueves, 11 de abril de 2013

Cómo agregar elementos (opciones) a un COMBOBOX - Manual y con cursor

Hola. Saludos a todos. En esta ocasión, presentaré como configurar un objeto COMBOBOX para mostrar una lista (desplegable) de opciones, de forma manual y a través de un cursor o tabla (.dbf).

El objeto ComboBox permite la interaccion de diversas opciones en un mismo momento y espacio dentro de nuestras aplicaciones. Es muy óptimo y versatil para el manejo de datos y permite ahorrar bastante recurso y tiempo.

Manual

Para configurar un combo con datos de forma manual, debemos tener en cuenta algunas cosas. Cuando etablecemos uno o varios datos de forma manual, a traves de la propiedad RowSource del combo, estamos limitando la variacion de opciones únicamente a los datos que registramos en dicha propiedad. Esto es util en casos en donde las opciones del usuario para realizar una transaccion van de un "Si" o "No". Por ejemplo: En una aplicacion de nómina, en las altas de empleado, podemos configurar si un empleado esta activo o no


Para configurar manualmente el combo, vamos a las propiedades de este, en la pestaña DATA, ubicamos la propiedad RowSourceType y la establecemos en 1 - Value. Ubicamos la propiedad RowSource y aqui escribimos las opciones que tendra, disponibles, el combo. Separamos cada opcion con una coma, asi:

Cada opcion debe ir separada únicamente por una coma. Si Agregamos un espacio, éste estara contenido en la opcion.

Ahora... si queremos que el combo no permita escritura, en tiempo de ejecucion, vamos a las propieaddes del combo y en la pestaña LAYOUT ubicamos la propiedad STYLE y escogemos la opcion 2 - DropDownList. Con esto, resolvemos ese problema. Luego, podemos aplicar formato deseado para mejorar la presentacion del objeto. Y listo.


 Con CURSOR (temporal o tabla fisica .dbf)

Cargar un cursor con un cursor temporal o una tabla fisica es muy util cuando el numero de opciones es considerable y dispuesto a cambios. Por ejemplo: cuando diseñamos una aplicacion de nómina, definimos unicamente los parametros de ingreso y registro de unidades administrativas en donde se ubicaran los empleados. Pero es el usuario quien registra dichas unidades, y cuando realice las altas de su personal, necesita conocer esas unidades para ubicar a los trabajadores. Como programadores, no sabemos cuantas unidades tendra el sistema ni cuando se registratrán. Al hacer la apertura de la empresa, el cliente inicia operaciones con 20 empleados distribuidos en 4 unidades administrativas. Primero registra las unidades y luego a los empleados. El el formulario de alta de empleados, tiene un campo disponible para ingresar la ubicacion del trabajador, la cual se escoge a través de un combo que desplega todas las unidades disponibles (4). Pasan 4 meses y la empresa crece. El personal pasa a 50 y las unidades a 8. Entonces, como registra el cliente a sus nuevos empleados y sus ubicaciones (predispuestas a cambios, a como pueden ver) cambiantes en el modulo de altas??? Como hace el sistema para ir registrando unidades por un lado, y por otro (alta de empleados) ir mostrando algunas opciones nuevas en un combobox??? Va asi:


Sigamos la linea del ejemplo de sistema de nomina, para ser mas ilustrativos. Imaginemos que tenemos una tabla fisica llamada unidades_adm en donde registramos las unidades administrativas de la empresa, con los campos: codigounidad, nombreunidad. Esta tabla, "alimentara" el combobox ubicado en el modulo de alta de empleado. Vamos al modulo de altas de empleado, y procedemos asi:

1. Agregamos la tabla unidades_adm al entorno de datos de nuestro form.
2. En las propiedades del combo, ubicamos en la pestaña DATA la propiedad RowSourceType y seleccionamos la opcion 6 - Fields. Con esto, establecemos que el combo sera "alimentado" con los registros de un campo de una tabla. En la propiedad RowSource, seleccionamos el campo especifico con el cual deseamos hacer referencia de opciones en el combo. En este caso, unidades_adm.codigounidad. Seleccionamos la propiedad Style (en Layout) y escogemos 2  - DropDownList

Y listo. Ahora, cada vez que el usuario registre una nueva unidad, en el modulo de altas de empleados, ya las opciones estaran disponibles! :) De esta forma muy sencilla, podemos ver como mantener actualizadas las opcions de un combobox.

Para usar un cursor temporal, lo unico que hacemos es crear el cursor en el init del form y luego cargarlo al combo. EN el init del form, seleccionamos los datos en un cursor

SELECT codigounidad FROM unidades_adm INTO CURSOR temp1

y en las propiedades del combo, colocamos el nombre del cursor y campo

temp1.codigounidad

Y listo! :)

Cualquier duda, consulta o comentario, siempre es bienvenido para mejorar! :D

Saludos!
Desde Managua, Nicaragua! :D :D
Raven ;D ;D ;D


lunes, 18 de febrero de 2013

Quitar los "/" y ":" de una expresion DATETIME() pasandola a CARACTER

Hola. Saludos a todos. Hoy, conversaba con mi buen amigo, Jose Daniel Ramos, sobre como quitar los "/" y los ":" de una expresion DATETIME() y pasar dicha expresion a una sola cadena tipo caracter, es decir, de esto "18/02/2013 04:57:PM" a 18022013045730.

Para esto, colocamos un codigo como este en algun evento o metodo:

LOCAL MIFECHA

MIFECHA=TTOC(DATETIME())
MIFECHA=PADC(TTOC(DATETIME()),20," ")
MIFECHA= STRTRAN(MIFECHA,":","")
MIFECHA=STRTRAN(MIFECHA,"/","")
MIFECHA=STRTRAN(MIFECHA," ","")

**Mostramos resultados
MESSAGEBOX(MIFECHA)
**--//

Y listo. Con esto, podemos incluir un registro cronologico, tal y como mencionaba Jose, de ciertas acciones, tales como complementos de nombres para archivos guardados en carpetas (respaldos), archivos generados en aplicaciones como excel o word o PDF, entre un sin numero mas de acciones.

Mil gracias Jose Ramos por el aporte.

Saludos. Sugerencias y comentarios son siempre bienvenidos para mejorar.
Un abrazo! Desde Managua, Nicaragua.
Febrero 2013


Ravenn! :)