GrialCombo

De GrialWIKI

Introducción al Framework Grial

Índice


Link=

Controles con sufijo: _Scb

Contenido

Descripción General

El GrialCombo tiene tres formas principales de utilización:

  1. Como selector de registro para la transacción, en formato combo desplegable.
  2. Como selector de registro para un campo RELA, dentro de la transacción.
  3. Como Grilla para la edición de Datos, en formato DisplayFullGrid

Link=

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

Herramientas personales