Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Solapa Listados
Pag. 1
Solapa Datos
En la solapa datos hay un contenedor como se puede observar de color Celeste donde se debern insertar los controles activex a utilizar.
PageFrame: Nombre = Pgf, TabPage[1] = Page1, TabPage[2] = Page2 Grid: Nombre = grdDatos (Corresponde a la grilla de la solapa listados) Container: Nombre = cnt_Fields (Corresponde al contenedor de los controles activex) Para lograr que el ABM funcione, he creado diversos controles activex que acompaan a la funcionalidad de este ABM como por ejemplo, TextBoxes, ComboBoxes, ToolBar, Labels, grids, etc, ya que para ciertas funcionalidades, necesito que tengan ciertas funcionalidades propias.
Pag. 2
Pag. 3
Pag. 4
Si observamos este cdigo, al final se cambia el estado del control Herramientas, ya que los botones nuevo, editar, modificar y cerrar no tienen el mismo estado que los botones grabar y cancelar. ConfigurarGrilla: Este mtodo se encarga de configurar el control grid para el muestreo de la informacin. El cdigo que se gener es el siguiente:
Como se puede observar en el cdigo, la grilla tiene funcionalidad propia que incorpor al desarrollar el control activex. Tiene sus propiedades y mtodos personalizados. Esta grilla por Autor: Leonardo D. Zulli Pag. 5
Este cdigo al momento de crear el ABM de una tabla, se debe insertar al principio un DODEFAULT(), ya que es importante que estas lneas se ejecuten en el formulario heredado. Verifico si cur_Tempo est siendo usado, si est en uso, entonces, limpio el RecordSource del grid para refrescar los datos y cierro el cursor actualmente en uso. LlenarCbos: Este mtodo est desarrollado con el fin de llenar comboboxes en caso de que los mismos tengan que levantar datos de alguna otra tabla maestra y completar el campo Foreign Key. El cdigo generado es el siguiente:
Recibe como parmetro el nombre del control combo a llenar, el valor de la propiedad RowSource y el nombre del Alias con el que se debe llenar el combobox. En el formulario heredado se debe realizar el llamado tantas veces como como combobox haya insertado en cnt_Fields.
Pag. 6
En este cdigo tengo que validar el tipo de control del que estamos hablando, para ello, cada control y poder enlazar cada campo en el control que corresponde. Para esto, cada control debe tener la propiedad personalizada cFieldName.
Pag. 7
Set_Insert_Cmd: Este mtodo se encuentra en blanco, es decir, sin cdigo, ya que el cdigo se lo debe generar el desarrollador en el formulario heredado. Aqu el desarrollador debe crear el comando INSERT INTO que permitir el alta de un nuevo registro en la tabla. Lo mismo ocurre con los mtodos Set_Update_Cmd para el comando UPDATE y Set_Delete_Cmd para el comando DELETE FROM xxx.
Pag. 8
Como se puede observar, los controles activex deben tener una propiedad personalizada que indica si el campo es Requerido y un mtodo personalizado que permite el blanqueado del control EstaVacio(). Ahora en la barra de herramientas, debemos desarrollar los siguientes mtodos: Nuevo: Proporciona un cdigo genrico para cuando el usuario hace clic en un evento Nuevo.
Este cdigo verifica si el formulario debe generar el cdigo automticamente, en caso de que sea as, entonces, utiliza la tabla Numerad.
Pag. 9
Al entrar en el modo de edicin de un registro existente, el formulario sita al usuario en la solapa Datos, refresca los controles activex de cnt_Fields y cambia es estado poniendo al form en modod de edicin. Grabar: Este mtodo ocurre cuando el usuario procede a grabar los cambios, ya sea para dar de alta un registro nuevo o bien para modificar uno existente. El grabar ya proporciona el manejo de transacciones, con lo cual, al desarrollar un futuro ABM no hay que preocuparse por este tema. Tambin realiza la validacin de los datos. El cdigo de grabacin genrico que proporciona este mtodo es el siguiente:
Pag. 10
Si observamos este cdigo, el ABM hace el llamado a Set_Insert_Cmd y Set_Update_Cmd segn la accin que est realizando el usuario en el ABM. Mediante la propiedad lTransOk, el ABM se da cuenta si la transaccin fue satisfactoria para posteriormente realizar un COMMIT o si se ha producido un fallo para realizar un ROLLBACK. En ambo caso el ABM informa al usuario mediante un MESSAGEBOX el resultado de su transaccin. En este mtodo se establece el tipo de bloqueo que debe tener una la tabla que se va a transaccionar, este ABM realiza un bloqueo por fila que sera un Buffering = 3. Este modo de bloqueo se utiliza ya que el ABM va a procesar de a una fila. Tambin se actualiza la tabla Numerad con el prximo cdigo a generar, esta tabla tambin tiene como Buffering = 3.
Pag. 11
En este cdigo tambin proporciona el manejo de transacciones y establece el buffering a 3, bloqueo por fila. Hace el llamado a Set_DELETE_Cmd() para ejecutar la instruccin DELETE creada por el desarrollador en el formulario heredado. Cancelar: Proporciona un cdigo genrico que permite cancelar una operacin de Alta o Modificacin de un registro. El cdigo es el siguiente:
Pag. 12
Cada vez que se produce el cambio de fila, recupero los datos a los controles activex que estn insertado en el cnt_Fields. El evento Load del formulario proporciona el siguiente cdigo:
Este cdigo se encarga de la apertura de las tablas que se van a necesitar en el ABM. En caso de necesitar abrir ms tablas, en el formulario heredado hay que comenzar con un DODEFAULT() para que ejecute este cdigo como herencia. En el evento Init se proporciona el siguiente cdigo:
Mediante el RefrescarGrilla(), se llena el grdDatos para mostrar la informacin al usuario, el RecuperarDatos, permite levantar los datos del primer registro en los controles activex en cnt_Fields y establece el formulario al estado inicial del ABM. En el evento Unload se realiza el cierre de las tablas que se abrieron en el Load. El cdigo que proporciona es el siguiente:
Pag. 13
De esta forma tenemos un ABM Genrico finalizado. A continuacin voy a explicar como desarrollar algunos de los controles activex como ejemplo de cmo desarrollar estos controles para darle funcionalidad al ABM genrico.
En este control se contempl la funcionalidad para diez columnas. Propiedades: Alias_Name: Contiene el nombre del alias a mostrar en el grid List_ControlSource: Contiene la lista de campos a enlazar al cada columna Lista_Ancho_Cols: Contiene los valores de ancho de columnas Ordenado: Valor booleano de uso interno que indica si est ordenado o no. Permitir_Busqueda: Indica si la grilla debe incorporar la funcionalidad de bsqueda progresiva. Autor: Leonardo D. Zulli Pag. 14
Se establece el RecordSource con el nombre de Alias que se debe setear en la propiedad Alias_Name. Luego mtodo generar grid se encarga de realizar el muestreo de los datos. Cdigo del mtodo Generar_Grid()
En este cdigo se configuran las propiedades de cada columna para darle formato al Grid y enlazar los datos al mismo. Para esto deben existir las propiedades: Titulos_Cabecera: Ttulo de las columnas que va a ver el usuario separado por coma (,).
Pag. 15
Pag. 16
Pag. 17
Pag. 18
Esta rutina recibe como parmetro el nombre del campo de la columna en la que se va a realizar la bsqueda, el nombre del ndice por el que se indexa y el cdigo de tecla que el usuario ha presionado. Cuando se indexa un cursor que va a estar vinculado a la grilla, es importante que el nombre del ndice sea exactamente igual al nombre del campo que se est indexando, para que este cdigo genrico pueda reconocer el mismo y al momento de buscar pueda realizar el ordenamiento de esa columna.
Pag. 19
Cada celda de la grilla, por naturaleza es un control TextBox, con lo que disponemos de los eventos de cualquier control textbox normal. En este caso se va a codificar el evento KeyPress. Esto se debe hacer en el textbox de cada columna:
Este cdigo realiza el llamado a localizar_registros para realizar la bsqueda progresiva a medida que el usuario va tipeando sobre el contenido de una columna. Autor: Leonardo D. Zulli Pag. 20
Esto hace que cuando el usuario haga clic sobre el encabezado de alguna columna, los datos de ordene por dicha columna.
Control clsTextBox
Este control es un TextBox especial que acompaa a la funcionalidad del ABM Genrico que se ha desarrollado anteriormente.
Propiedades
AutoCompleta: Indica si el contenido se debe completar con ceros a la izquierda. cFieldName: Nombre del campo con el que se va a enlazar en un ABM. IsCharacter: Valor booleano que indica si el control contiene un valor de tipo texto. IsDateTime: Valor booleano que indica si el textbox contiene un valor fecha IsInteger: Valor booleano que indica si se trata de un textbox numrico que acepta solo enteros. IsNumeric: Valor booleano que indica si se trata de un textbox numrico que acepta valores decimales. MsgError: Mensaje de error a mostrar en caso de que el campo sea requerido. Requerido: Valor booleano que indica si el dato es de ingreso obligatorio.
Cdigo del evento GotFocus Al salir del recibir el foco el cuadro de texto cambia su color de fondo y al salir vuelve a su color original. Este evento se produce al recibir del foco y el cdigo es el siguiente:
Pag. 21
Cdigo del Evento INIT Al inicializarse el control, se debe inicializar su contenido para definir el tipo de dato que va a contener. El cdigo es el siguiente:
this.blanquear()
Cdigo del evento LostFocus Al perder el foco debe volver al color original del control. Tambin hay que verificar si se debe autocompletar con ceros a la izquierda. El cdigo es el siguiente:
El mtodo calcular se reserva por si al salir del foco se debe insertar algn tipo de frmula, por ejemplo, en el ingreso de una factura puede ser muy usado. Cdigo del mtodo Blanquear Este mtodo permite inicializar el control segn el tipo de dato que corresponda. El cdigo es el siguiente:
Pag. 22
Y as se puede continuar desarrollando controles activex para que el ABM Genrico pueda funcionar con distintas formas de ingresar datos. A continuacin se muestra como se puede utilizar este ABM Genrico.
Pag. 23
Esta pgina contiene n simplemente un grid llamado grdDatos donde se mostrar todos los datos que tiene la tabla sobre la cual se va a trabajar.
Pag. 24
La pgina datos, tiene un contenedor donde se deber insertar los controles activex que se va a utilizar para el ingreso o la edicin de los registros. Tener en cuenta que al momento de insertar los campos en el contenedor, deber hacer clic derecho sobre el mismo e ir a la opcin Edit, ya que los campos tienen que quedar dentro del contenedor para que el formulario reconozca cada control que se inserte.
Propiedades
AutoGenCodigo
Esta propiedad permite indicar al ABM si el cdigo se generar automticamente o el usuario lo ingresar manualmente. Tenga en cuenta que el cdigo no es lo mismo que el campo Id. Hay casos en que los usuarios prefieren generar los cdigos manualmente. Se establece .T. para que se genere automticamente y .F. para que el usuario lo ingrese a mano.
cNombreTabla
Especifica el nombre de la tabla fsica sobre la que se va a trabajar.
ListCtrlSource
Este propiedad establece los nombres de los campos que se vincular con cada columna del Grid. Cada campo debe estar separado mediante una coma (,). Por ejemplo: Id,Codigo,Descripcion,etc.
Pag. 25
nCodigo
Devuelve el prximo cdigo que se debe generar. Para que esta propiedad contenga un valor deber tener AutoGenCodigo en .T. (verdadero). Esta propiedad recibe el valor cuando el usuario hace clic en Nuevo, donde el desarrollador debe asignar en el evento click de cmdNuevo el valor al cuadro de texto que corresponde al campo cdigo.
Pk_FieldName
Se debe establecer el nombre del campo Id. El ABM utiliza esta propiedad para saber a que campo asignar el prximo Id.
Pk_Identity
Mediante esta propiedad se indica al ABM si el campo Id. De la tabla a procesar debe ser calculado automticamente, es decir, si ese campo debe ser identity. Para que esto funcione se debe tener seteado el campo Pk_FieldName.
Titulos_Cabeceras
Esta propiedad permite establecer los ttulos de cada columna que dispone el Grid. Cada ttulo debe estar separado por coma (,), por ejemplo: Cdigo,Razn Social,etc.
Pag. 26
Para que el grid pueda tener la funcionalidad de ordenamiento y bsqueda, debe tener en cuenta que hay que indexar el cursor mediante la instruccin INDEX ON.
Pag. 27
Set_UPDATE_Cmd (Mtodo del Formulario) En este mtodo se debe insertar la instruccin UPDATE SQL que permitir modificar los datos de un registro existente. Por ejemplo:
Pag. 28
Pag. 29
Si el usuario se sita en una columna y comienza a tipear, el sistema proceder a realizar una bsqueda progresiva facilitando la localizacin de un registros en particular.
Pag. 30
Pag. 31