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¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo