Importante
El ejemplo planteado en este artículo solamente es válido para las grid de la pantalla 'Extracto de cuentas' a partir de la versión 2400 H20.
En este caso, la pantalla de 'Extracto de cuentas' dependiendo de si el usuario tiene marcado o no el check de 'Ver acumulado' se modifica el '.From' de la grid, por tanto no se puede personalizador como el resto de grids, en este caso tendríamos que utilizar la propiedad '.FromPersonalizada' en vez de la '.From'.
En el siguiente ejemplo vamos a ver como añadir 3 campos extra para ver el nombre de la subcuenta, la serie y el número de la factura, tanto con el check de Acumulado marcado como desmarcado.
Recuerda
Se tiene que personalizar siempre para los dos casos con la misma estructura
Personalizar la grid cuando el usuario no ve el acumulado
1. Definimos una vista personalizada con los campos que vamos a añadir:
CREATE VIEW VPers_TempExtracto AS SELECT TEC.* ,CSC.Descrip AS NombreSubcuenta ,FCC.NumFactCliente AS NumFactCli ,SF.Descrip AS SerieFactDescrip FROM Temp_ExtractoContable TEC --Tabla temporal donde se almacenan los registros del extraco INNER JOIN dbo.funTblDameIdDocSesion() FAHS ON FAHS.idDoc = TEC.IdDocSesion INNER JOIN Conta_SubCuentas CSC ON CSC.Subcuenta = TEC.SubCuenta AND CSC.IdEjercicio = TEC.IdEjercicio LEFT JOIN Facturas_Cli_Cab FCC ON FCC.idFactura = TEC.idFactura LEFT JOIN Series_Facturacion SF ON SF.SerieFactura = FCC.SerieFactura GO ZPERMISOS VPers_TempExtracto
2. En la configuración por F10, modificamos el '.FromPersonalizada' para utilizar nuestra vista personalizada y añadir los campos extra:
Código VB6:
Sub Show() gForm.Controls("grdLineas").activarscripts = True 'Activar scripts para la grid gForm.FromPersonalizada = "VPers_TempExtracto" 'Modificar el FROM para utilizar una vista personalidad End Sub Sub Grid_BeforeLoad(aGrid) If aGrid.name = gForm.Controls("grdLineas").Name Then gForm.FromPersonalizada = "VPers_TempExtracto" 'Modificar el FROM para utilizar una vista personalidad If Not gForm.Controls("grdLineas").ExisteColumna("NombreSubcuenta") Then 'Comprobar que existe alguna de las columnas personalizadas para no añadirlas dos veces 'Añadir columnas personalizadas gForm.Controls("grdLineas").AgregaColumna "NombreSubcuenta", 1400, "Nombre Subcuenta",False gForm.Controls("grdLineas").AgregaColumna "SerieFactDescrip", 1400, "Serie Fact.",False gForm.Controls("grdLineas").AgregaColumna "NumFactCli", 1400, "Num Fact.",False gForm.Controls("grdLineas").Campo("NombreSubcuenta").LockedTabla = True gForm.Controls("grdLineas").Campo("SerieFactDescrip").LockedTabla = True gForm.Controls("grdLineas").Campo("NumFactCli").LockedTabla = True End If End If End Sub Sub Grid_AfterLoad(aGrid) If aGrid.name = gForm.Controls("grdLineas").Name Then 'Cambiar la posición de las columnas 'gForm.Controls("grdLineas").Campo("NombreSubcuenta").Column.Order = 3 'gForm.Controls("grdLineas").Campo("SerieFactDescrip").Column.Order = 4 'gForm.Controls("grdLineas").Campo("NumFactCli").Column.Order = 5 End If End Sub
Código C#:
using AhoraConta; using AhoraCore; using AhoraOCX; using AhoraSistema; using AhoraConta; namespace AhoraScriptsPantalla { public class AhoraConta_frmExtractos : AhoraOCX.AhoraBaseScript { public void Show() { (gForm.Controls["grdLineas"] as ICntGridUsuario).ActivarScripts = true; (gForm as IfrmExtractos).FromPersonalizada = "VPers_TempExtracto"; // Modificar el FROM para utilizar una vista personalizada } //Para Activar este evento hay que configurar la grid. Poner en el void Initialize por ejemplo: (gForm.Controls["grdLineas"] as ICntGridUsuario).ActivarScripts = true; public void Grid_BeforeLoad(ICntGridUsuario aGrid) { if (aGrid.Name == gForm.Controls["grdLineas"].Name) { (gForm as IfrmExtractos).FromPersonalizada = "VPers_TempExtracto"; // Modificar el FROM para utilizar una vista personalizada if ( !((gForm.Controls["grdLineas"] as ICntGridUsuario).ExisteColumna("NombreSubcuenta")) ) { ICntGridUsuario lGrid = (ICntGridUsuario)gForm.Controls["grdLineas"]; lGrid.AgregaColumna("NombreSubcuenta", 93, "Nombre Subcuenta", false); lGrid.AgregaColumna("SerieFactDescrip", 93, "Serie Fact.", false); lGrid.AgregaColumna("NumFactCli", 93, "Num. Fact.", false); lGrid.Campo("NombreSubcuenta").LockedTabla = true; lGrid.Campo("SerieFactDescrip").LockedTabla = true; lGrid.Campo("NumFactCli").LockedTabla = true; } } } } }
Personalizar la grid cuando el usuario ve el acumulado
En este caso, cuando el usuario quiere ver el acumulado se genera una tabla temporal única para ese usuario mediante el proceso 'pExtractoCuentaAcumuladoFrom', el cual dispone de proceso _Pre y _Post para adecuarse al cliente en el caso de ser necesario.
Para este ejemplo, vamos a replicar lo que hemos realizado en la personalización anterior para visualizarlo con el check de acumulado en el proceso _Post 'pExtractoCuentaAcumuladoFrom_Post' de la siguiente forma:
DECLARE @lSQL NVARCHAR(MAX) DECLARE @aFrom_Aux VARCHAR(8000) SET @aFrom_Aux = @aFrom SET @aFrom += '_Pers' --Añadimos _Pers a la tabla que se va a crear SELECT @lSQL = 'IF OBJECT_ID(''tempdb..'+@aFrom+''') IS NOT NULL DROP TABLE '+@aFrom --En el caso de existir la eliminamos EXEC sp_executesql @lSQL -- Definimos la consulta con los campos personalizados para crear la tabla temporal con un SELECT INTO de la misma forma que la vista SET @lSQL = 'SELECT TECA.* ,CSC.Descrip AS NombreSubcuenta , FCC.NumFactCliente AS NumFactCli, SF.Descrip AS SerieFactDescrip INTO ' + @aFrom +' FROM ' +@aFrom_Aux +' TECA ' +'INNER JOIN Conta_SubCuentas CSC ON CSC.Subcuenta = TECA.SubCuenta AND CSC.IdEjercicio = TECA.IdEjercicio LEFT JOIN Facturas_Cli_Cab FCC ON FCC.idFactura = TECA.idFactura LEFT JOIN Series_Facturacion SF ON SF.SerieFactura = FCC.SerieFactura' EXEC sp_executesql @lSQL --Generamos la tabla