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