GrialCombo
De GrialWIKI
Introducción al Framework Grial |
|
Controles con sufijo: _Scb
Descripción General
El GrialCombo tiene tres formas principales de utilización:
- Como selector de registro para la transacción, en formato combo desplegable.
- Como selector de registro para un campo RELA, dentro de la transacción.
- Como Grilla para la edición de Datos, en formato DisplayFullGrid
El Combo como selector del Registro principal de la Transacción
Como selector de registro, el GrialCombo representa visualmente la elección de un registro dentro de una vista. Se utiliza en la zona de selección de registro (Sobre la TopBar de un GrialCont), para permitir elegir el registro sobre el que va a ser realizada la transacción. También se utiliza para elegir un registro relacionado con un campo RELA dentro de la transacción.
El Combo identifica al registro mediante el valor del campo ID. La propiedad CurrentValue del objeto combo contendrá el ID del registro elegido o null en caso de no existir ninguna selección. Los controles tipo Combo se nominan con el nombre de la Tabla Troncal representada + “_Scb”; por ejemplo: PreForm08_scb
Visualmente, dentro de un GrialCombo, según su configuración registrada, puede encontrarse una lista de valores (representación directa del recordset de datos) o un árbol (representación de datos mediante un GrialTree interno).
En ambos casos, la propiedad Rst del control, retornará un recordset con los datos del registro actualmente seleccionado por el usuario.
Descripción de la operatoria
Para realizar una selección de registro para una transacción, se coloca un GrialCombo sobre la zona de la TopBar de un GrialCont, a la izquierda de los botones de Alta, Baja y Modificación. El combo representará el registro sobre el cual se realizará la operación de modificación o baja.
En la inicialización del módulo (UserDocument_Show), se cargan los datos del combo…
GrialCont.LoadData PreForm08_Scb
En el momento de inicio de la transacción (ButtonClick), se utiliza para obtener el ID del registro seleccionado por el usuario…
Private Sub GrialCont_ButtonClick(ByVal GrialButtonCode As GrialApp.GrialButtons, Cancel As Integer, NewState As GrialApp.Operation_States) On Error GoTo ErrH Select Case GrialButtonCode Case BUTTON_NEW PreForm08_Scb.PrepareAddnew 'Nuevo registro. Hago un espacio en blanco en el combo IDPreform08 = -1 PrepararTansaccion Case BUTTON_MODIFICATION, BUTTON_DELETE 'Si no se ha elegido ningún registro, se cancela If NoDataIn(ID_PreForm08_Scb.CurrentValue) Then MsgBox "Debe elegir una partida", vbCritical Cancel= True Exit Sub End if IDPreform08 = ID_PreForm08_Scb.CurrentValue PrepararTansaccion . . .
Luego, al actualizar los datos (BottomButtonClick, BUTTON_ACCEPT), se recarga el registro modificado para reflejar los últimos cambios …
Private Sub GrialCont_BottomButtonClick(ByVal GrialButtonCode As GrialApp.GrialButtons, Cancel As Integer, NewState As GrialApp.Operation_States) On Error GoTo ErrH If GrialButtonCode = BUTTON_ACCEPT Then Dim Txn As New [[GrialTransaction]] Select case GrialCont.LastButtton Case BUTTON_MODIFICATION, BUTTON_NEW 'Actualizo el recordset troncal GrialCont.ChangeMainRst _ PreForm08_grq.Rst, PreForm08GridView_grq.Rst, "ID_PREFORM08" 'Preparo la transacción Txn.Cmd PreForm08_grq.Rst 'Aplico la transacción en el Servidor GrialCont.Apply Txn If GrialCont.LastButton = BUTTON_NEW then ‘ Era un Alta IDPreForm08 = SqlArea.NewID ‘ recupero el nuevo ID End if 'Refresco los datos del combo PreForm08_Scb.LoadOnCurrentRecord IDPreForm08 Case BUTTON_DELETE PreForm08_grq.Rst.Delete 'Elimino el registro en el troncal Txn.Cmd PreForm08_grq.Rst 'Preparo la transacción GrialCont.Apply Txn 'Aplico la transacción en la BD (delete) PreForm08_Scb.DeleteRecord 'Elimino el registro del combo. . . ErrH: MsgError GrialCont If Txn.Commited then Resume Next 'Continuo si ya esta aplicada la txn Cancel = True End Sub
Uso del GrialCombo como selección de valor para un campo RELA
En este caso, el Combo se utiliza como una parte de los datos de la transacción (dentro del Container_Frm).
La secuencia normal de uso es la siguiente:
Ejemplo: En el comienzo del módulo, se cargan los datos del control
GrialCont.LoadData PreForm23_Scb
(Nota: Si el combo muestra siempre un conjunto de datos diferente, dependiendo del registro elegido para cada transacción, debe cargarse cada vez que se inicia una transacción, en PrepararTransaccion)…
En el momento de preparación de la transacción, una vez recuperados los datos principales, posicionamos el combo según el valor del campo RELA asociado…
Private Sub PonerEnPantalla() 'Posiciono el combo según el valor del campo RELA With PreForm20_grq.Rst PreForm23_Scb.CurrentValue=.Rst!RELA_PREFORM23.Value ...
Al actualizar los datos (BottomButtonClick, BUTTON_ACCEPT), tomamos el valor para el campo RELA desde el Combo…
Private Sub TomarDatosDePantalla 'Actualizo el recordset troncal con los datos With PreForm20_grq.Rst UpdateField !RELA_PREFORM23, PreForm23_Scb.CurrentValue, "la unidad de medida" ...
Uso del GrialCombo como Grilla ( DisplayMode = CDM_DisplayFullGrid)
En este caso, el Combo se utiliza para mostrar y opcionalmente editar varios registros de detalle dentro de una transacción (dentro del Container_Frm). Para utilizar un Combo en modo Grilla debe establecerse la propiedad DisplayMode con el valor: CDM_DisplayFullGrid
La secuencia normal de uso es la siguiente:
Al preparar la transacción, se cargan los datos del detalle:
Ejemplo:
Private Sub PrepararTransaccion 'Preparo el registro Troncal PreForm20Grq.Init _ "Select * From Pre_Form_20" & _ " Where ID_PREFORM20 = " & IDPreForm20 'Preparo el troncal de los detalles PreForm21Grq.Init _ "Select * From Pre_Form_21" & _ " Where RELA_PREFORM20 = " & IDPreForm20 'Pongo el Filtro para traer los detalles de la cabecera seleccioanda PreForm21_scb.ExtraFilterCondition = "RELA_PREFORM20 = " & IDPreForm20 'Recupero los datos GrialCont.LodaData PreForm20grq, PreForm21Grq, PreForm21_Scb
Al actualizar los datos (BottomButtonClick, BUTTON_ACCEPT), tomamos los datos desde el Combo en formato Grilla…
Private Sub TomarDatosDePantalla 'Actualizo el recordset troncal con los datos UdpateField PreForm20Grq.Rst!PREFORM20_DESCRI,DescriTxt ... 'Actualizo los detalles desde el Combo-Grilla PreForm21_scb.Grid_UpdateUserInput GrialCont.ChangeMainRst PreForm21_scb.Rst, PreForm21Grq.Rst, "ID_PREEJEC21" End Sub
Para permitir al Usuario modificar los datos, agregar o eliminar registros de un Combo–Grilla, debe establecer las propiedades: GridAllowEdit, GridAllowAddNew y GridAllowDelete
Otras Propiedades del Combo en formato Grilla
- GridValue(FieldName As String) as Variant
- Para acceder a los datos de una columna de la fila actualmente seleccionada
- Function Grid_DataRowSelected () as Boolean
- Para verificar si el usuario está posicionado sobre una fila de datos. Esta propiedad da False si no hay filas en la grilla, o si el usuario esta posicionado sobre una fila de agrupamiento. Se utiliza como control antes de operar sobre los datos.
- ColumnLocked(FieldName As String) As Boolean
- Para bloquear la edición de una columna en particular
- ColumnVisible(FieldName As String) As Boolean
- Para hacer visible / invisible una columna en particular
- ColumnWidth(FieldName As String) As Integer
- Para establecer manualmente el ancho de una columna
- ColumnHeader(FieldName As String) As String
- Para establecer manualmente el titulo de una columna
- ColumnFormat(FieldName As String) As String
- Para establecer manualmente el fromateo de datos de una columna. Por ejemplo "Short Date", "General Number", "yyyy-mm-dd", etc.
- Event DblClickFullGrid()
- Para responder cuando el usuario haga doble-click en la grilla
- Event GridRowColChange(LastRow As Long, LastCol As Integer)
- Para responder cuando el usuario se mueva dentro de la grilla
- Event BeforeUpdate(Cancel As Boolean)
- Para verificar los datos al momento que el usuario modifica los datos de una fila
- Event BeforeDelete(Cancel As Boolean)
- Para controlar antes que el usuario elimine una fila
Propiedades para la impresión
- Propiedades ReportTitle, ReportSubTitle y ReportSecondaryTitle
- Para establecer los títulos en caso que el usuario decida imprimir la grilla
- Metodo ClearAllOperationColumns
- Permite eliminar las columnas que se totalizan por default cuando la grilla es agrupada e impresa.
- Metodo SetOperationColumns
- Permite establecer que columnas que se totalizan cuando la grilla es agrupada e impresa.
GC_SELECTION, Columna de Selección de múltiples filas (check)
Si se desea utilizar un combo para que el usuario "marque" uno o mas registros, se debe agregar un campo numerico y llamarlo GC_SELECTION en el query.
Si el campo se llama GC_SELECTION, el combo hará internamente el manejo necesario para poder marcar y desmarcar en un solo click la columna de tipo "check"
Nota: Las consideraciones especiales que realiza internamente el combo si un campo tiene el nombre especial: GC_SELECTION son: a) Escuchar el evento click, controlando si lo hace sobre el checkbox, aunque seea en una fila diferente a la actual y b) permitir que la grilla sea modificable (GridAllowEdit) durante el cambio de checked/unchecked. Esto último permite que el usuario pueda hacer una selección múltiple de filas, aunque la grilla no sea editable por el usuario (GridAllowEdit=False).
Ejemplo, en el query del combo colocar:
select n5 as GC_SELECTION, ID_PREEJEC20 ,preejec20_comprobante ,PREEJEC20_DESCRI from PRE_EJEC_20, EXTRADUAL
SetFormatConditions: Cambiar el color de una fila, de acuerdo a los valores de cada registro.
Para la misma funcionalidad en .NET ver: RowDynamicColor
Formato:
Public Sub SetFormatConditions(ByVal FormatConditionCommands As String)
Mediante SetFormatConditions se pueden especificar condiciones que cambien el color y el formato del texto de una fila, de acuerdo a evaluaciones de los valores del registro.
Por Ejemplo:
PreEjec21_scb.SetFormatConditions( "IF PREEJEC21_MONTO < 0 THEN Red; IF PREEJEC21_MONTO > 1000 THEN Bold Green" & _ ";IF PREEJEC21_TIPO = 0 THEN Yellow bold italics" & _ ";IF PREEJEC21_TIPO = 1 THEN Color 96,20,45" & _ ";IF PREEJEC21_DESCRI contains contrato THEN Italic" & _ ";IF NOT PREEJEC21_SUBTIPO between 2 and 5 THEN blue Underline bold" )
Notas:
- Todas las palabras clave deben ir separadas por espacios.
- Las diferentes condifiones (IF) se separan por punto y coma (;)
- Todas las condiciones deseadas se deben especificar en una sola llamada a SetFormatConditions
- Cada llamada a SetFormatConditions comienza por eliminar las condiciones preexistentes
Posibles operadores para evaluacion:
- =
- >
- >=
- <
- <=
- contains
- between
- NOT
Posibles formatos:
- bold, italics, strikethru, underline
- red, yellow, green, blue
- color r,g,b - donde r,g y b son numeros decimales entre 0 y 255
Parametrized Where Condition y Where Condition Values
Esta propiedad permite agregar condiciones "where" con una construcción predeterminada, permitiendo agregar parámetros específicos, por ejemplo el rela a un registro cabecera.
Ejemplo: Parametrized Where Condition:
where rela_preejec20=[:ID_PREEJEC20:] and rela_ejeabas02 in (select id_ejeabas02 where ejeabas02_tipo = [:TIPO:] )
Where Condition Values:
ID_PREEJEC20=11234; TIPO ='A'
Como se observa en el ejemplo, en la propiedad ParametrizedWhereCondition, se colocan parámetros a reemplazar entre [: y :] En la propiedad WhereConditionValues, se debe dar a cada uno de los parámetros definidos un valor. El formato es:
PARAM=valor;...
Deben utilizarse estas propiedades únicamente cuando la condición de filtro es compleja y se desea que todos los modulos que utilizan el control apliquen los filtros de la misma forma. En los casos de uso mas comunes, se recomienda utilizar la propiedad ExtraFilterCondition, estableciendo directamente con la condición de filtro ya preparada.
Parametrized Where Condition y Where Condition Values cumplen la misma función que "ExtraFilterCondition", pero estableciendo un formato específico para el filtro.
ABMDocumentParams
Esta propiedad funciona en conjunto con la propiedad "ABMDocumentName", permitiendo enviar "parametros" al modulo definido en "ABMDocumenName"
El formato es:
"field AS paramName", donde "AS ParamName" es opcional
Ejemplo: ABMDocumentName:
eje_abas_01p
ABMDocumentParams
RELA_EJEABAS01 as ID_EJEABAS01, EJEABAS02_TIPO, RELA_PREFORM02
Cuando el usuario pulse el boton de "ABM" del combo, se invocara el modulo "eje_abas_01" y se enviaran tres parametros, ID_EJEABAS01, EJEABAS02_TIPO y RELA_PREFORM02.
Todos los parametros toman su valor de recordset actual del combo. El parametro ID_EJEABAS01 tomara su valor del campo RELA_EJEABAS01
En el sub "UserDocument_Show" del modulo destino, se prodra acceder a los parametros definidos mediante la propiedad GrialCont.Parameter
Ejemplo, en UserDocument_show de eje_abas_01p
... if GrialCont.Parameter("ID_EJEABAS01")<>"" then 'Si viene el parametro EjeAbas01_scb.CurrentValue = GrialCont.Parameter("ID_EJEABAS01") GrialCont.Button_Click BUTTON_MODIFICATION 'ingreso directo a editar end if
Deshabilitar impresión de Escudo, Marca de Agua, Fecha, Institución y Usuario en la impresión de la grilla
En el Form_Load, luego del GrialCont.Initialize hacer
xxx_combo_scb.GridPrint.Print.UseHeaders=False
Si se desea deshabilitar sólo la impresion de las imágenes de la cabecera:
xxx_combo_scb.GridPrint.Print.UseImageHeaders=False
Mediante la propiedad
xxx_combo_scb.GridPrint.Print
se pueden acceder a todas las propiedades y eventos del Grial.Print interno que se utiliza para imprimir la grilla
GrialTransaction <<< >>> GrialWorkflow