This repository has been archived on 2024-11-29. You can view files and clone it, but cannot push or open issues or pull requests.
Tecsitel_FactuGES/Informes/InformeEstPresupuestos.pas

1345 lines
44 KiB
ObjectPascal
Raw Normal View History

unit InformeEstPresupuestos;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
InformeEstadistico, Db, RxMemDS, StdCtrls, RdxComboBox, dxCntner, dxTL,
dxDBCtrl, dxDBGrid, ExtCtrls, RdxTitulos, RdxPaneles,
IBCustomDataSet, BaseDatos, IBSQL, IB, Excepciones, TeEngine, TeeFunci,
Series, TeeProcs, Chart, DBChart, IBDatabase, Grids, DBGrids, RdxBotones,
RdxBarras;
type
TfrInformeEstPresupuestos = class(TfrInformeEstadistico)
pnlResumen2: TRdxPanel;
cResumen2: TRdxCabecera;
pnlDatosResumen2: TPanel;
pnlGrid2: TPanel;
gridResumen2: TdxDBGrid;
pnlTitulosResumen2: TPanel;
DBChart1: TDBChart;
Series1: TBarSeries;
Series2: TBarSeries;
Series3: TBarSeries;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
DataSource1: TDataSource;
IBDataSet1: TIBDataSet;
IBDataSet3: TIBDataSet;
IBDataSet2: TIBDataSet;
Series4: TBarSeries;
Series5: TBarSeries;
Series6: TBarSeries;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label10: TLabel;
pnlA1T1: TLabel;
pnlA1T2: TLabel;
pnlA1T3: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
etiComp: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
pnlResumen3: TRdxPanel;
cResumen3: TRdxCabecera;
pnlDatosResumen3: TPanel;
pnlGrid3: TPanel;
gridResumen3: TdxDBGrid;
pnlTitulosResumen3: TPanel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
dsResumen2: TDataSource;
TablaResumen2Mem: TRxMemoryData;
dsResumen3: TDataSource;
TablaResumen3Mem: TRxMemoryData;
Panel1: TPanel;
Label27: TLabel;
cbxFiltroGrafico: TRdxComboBox;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
pnlA2T1: TLabel;
pnlA2T2: TLabel;
pnlA2T3: TLabel;
pnlA3T1: TLabel;
pnlA3T2: TLabel;
pnlA3T3: TLabel;
procedure gridCustomDrawCell(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
ASelected, AFocused, ANewItemRow: Boolean; var AText: String;
var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
var ADone: Boolean); override;
procedure bCancelarClick(Sender: TObject);
procedure bImprimirClick(Sender: TObject);
procedure cbxFiltroGraficoChange(Sender: TObject);
private
FTotAno11: Integer;
FTotAno12: Integer;
FTotAno13: Integer;
FTotAno21: Integer;
FTotAno22: Integer;
FTotAno23: Integer;
TablaResumen1 : TIBDataSet;
sqlResumen1 : TStrings;
TablaResumen2 : TIBDataSet;
sqlResumen2 : TStrings;
TablaResumen3 : TIBDataSet;
sqlResumen3 : TStrings;
procedure LimpiarTotales;
function CalcularPre(const pSituacion: String; var TotalAno1: Integer; var TotalAno2: Integer): Boolean;
function GenerarTablaInforme: TRxMemoryData;
function InicializarResumen1: Boolean;
function FinalizarResumen1: Boolean;
function CalcularResumen1: Boolean;
procedure InicializarGridResumen1(var Grid: TdxDBGrid);
function InicializarResumen2: Boolean;
function FinalizarResumen2: Boolean;
function CalcularResumen2: Boolean;
procedure InicializarGridResumen2(var Grid: TdxDBGrid);
function InicializarResumen3: Boolean;
function FinalizarResumen3: Boolean;
function CalcularResumen3: Boolean;
procedure InicializarGridResumen3(var Grid: TdxDBGrid);
function CalcularResumen23Aux(const CodigosCliente: TStringList; const pSituacion: String;
Tabla: TPTablaMem): Boolean;
protected
procedure SetAno2(const Value: Variant); override;
function InicializarFiltros: Boolean; override;
function InicializarCamposTMem: Boolean; override;
function InicializarGrids: Boolean; override;
function CalcularDatos: Boolean; override;
function InicializarResumenes: Boolean; override;
function RefrescarResumenes: Boolean; override;
function FinalizarResumenes: Boolean; override;
public
constructor Create (AOwner : TComponent); override;
end;
var
frInformeEstPresupuestos: TfrInformeEstPresupuestos;
implementation
uses Tipos, Literales, Constantes, dxGrClms, Mensajes, TablaPresupuestos, RdxEmpresaActiva,
StrFunc, InfEstReportPresupuestos, Configuracion, SysFunc;
{$R *.DFM}
{ TfrInformeEstPresupuestos }
{ TfrInformeEstPresupuestos }
function TfrInformeEstPresupuestos.CalcularDatos: Boolean;
var
Aux: Double;
i: Integer;
Aux2: String;
begin
LimpiarTotales;
FTotAno11:= 0;
FTotAno21:= 0;
FTotAno12:= 0;
FTotAno22:= 0;
FTotAno13:= 0;
FTotAno23:= 0;
CalcularPre(CTE_ACEPTADO,FTotAno11,FTotAno21);
CalcularPre(CTE_ANULADO,FTotAno12,FTotAno22);
CalcularPre(CTE_PENDIENTE,FTotAno13,FTotAno23);
if FTotAno11 <> 0 then
pnlA1T1.Caption := IntToStr(FTotAno11);
if FTotAno12 <> 0 then
pnlA1T2.Caption := IntToStr(FTotAno12);
if FTotAno13 <> 0 then
pnlA1T3.Caption := IntToStr(FTotAno13);
//Solo calculamos totales en el caso de que se comparen dos a<>os
if not varIsNull(Ano2) then
begin
if FTotAno21 <> 0 then
pnlA2T1.Caption := IntToStr(FTotAno21);
if FTotAno22 <> 0 then
pnlA2T2.Caption := IntToStr(FTotAno22);
if FTotAno23 <> 0 then
pnlA2T3.Caption := IntToStr(FTotAno23);
if CalcularResta(FTotAno11, FTotAno21) < 0 then
pnlA3T1.Font.Color := COLOR_NEGATIVO
else
pnlA3T1.Font.Color := COLOR_POSITIVO;
if CalcularResta(FTotAno12, FTotAno22) < 0 then
pnlA3T2.Font.Color := COLOR_NEGATIVO
else
pnlA3T2.Font.Color := COLOR_POSITIVO;
if CalcularResta(FTotAno13, FTotAno23) < 0 then
pnlA3T3.Font.Color := COLOR_NEGATIVO
else
pnlA3T3.Font.Color := COLOR_POSITIVO;
if CalcularResta(FTotAno11, FTotAno21) <> 0 then
pnlA3T1.Caption := IntToStr(CalcularResta(FTotAno11, FTotAno21));
if CalcularResta(FTotAno12, FTotAno22) <> 0 then
pnlA3T2.Caption := IntToStr(CalcularResta(FTotAno12, FTotAno22));
if CalcularResta(FTotAno13, FTotAno23) <> 0 then
pnlA3T3.Caption := IntToStr(CalcularResta(FTotAno13, FTotAno23));
end;
for i:=0 to DBChart1.SeriesList.CountActive-1 do
begin
Aux2 := DBChart1.SeriesList.Series[i].Title;
case i of
0,3: begin
if i=0
then DBChart1.SeriesList.Series[i].Title := ('Aceptados ' + cbxFiltro2.Text)
else DBChart1.SeriesList.Series[i].Title := ('Aceptados ' + cbxFiltro3.Text);
DBChart1.SeriesList.Series[i].XLabelsSource := CTE_CAMPO2;
DBChart1.SeriesList.Series[i].XValues.ValueSource := CTE_CAMPO1;
DBChart1.SeriesList.Series[i].YValues.ValueSource := CTE_ACEPTADO;
end;
1,4: begin
if i=1
then DBChart1.SeriesList.Series[i].Title := ('Anulados ' + cbxFiltro2.Text)
else DBChart1.SeriesList.Series[i].Title := ('Anulados ' + cbxFiltro3.Text);
DBChart1.SeriesList.Series[i].XLabelsSource := CTE_CAMPO2;
DBChart1.SeriesList.Series[i].XValues.ValueSource := CTE_CAMPO1;
DBChart1.SeriesList.Series[i].YValues.ValueSource := CTE_ANULADO;
end;
2,5: begin
if i=2
then DBChart1.SeriesList.Series[i].Title := ('Pendientes ' + cbxFiltro2.Text)
else DBChart1.SeriesList.Series[i].Title := ('Pendientes ' + cbxFiltro3.Text);
DBChart1.SeriesList.Series[i].XLabelsSource := CTE_CAMPO2;
DBChart1.SeriesList.Series[i].XValues.ValueSource := CTE_CAMPO1;
DBChart1.SeriesList.Series[i].YValues.ValueSource := CTE_PENDIENTE;
end;
end;
end;
end;
function TfrInformeEstPresupuestos.CalcularPre(const pSituacion: String; var TotalAno1: Integer;
var TotalAno2: Integer): Boolean;
var
oSQL: TIBSQL;
Semaforo: Boolean; //Semaforo para controlar la pasada del Ano2 y asi empezar
Contador: Integer; //a compara con los datos de la tabla de memoria en lugar de
//el recordset
begin
Result := False;
Semaforo := False;
//PREPARAMOS LA SENTENCIA SQL A LANZAR
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select EXTRACT(YEAR FROM P.FECHAALTA) as ANO');
//Calculamos el intervalo correspondiente a cada una de las posibilidades
Case Intervalo of
tiMensual : SQL.Add(',EXTRACT(MONTH FROM FECHAALTA) as NFILA');
tiTrimestral : SQL.Add(',CAST((DIV(EXTRACT(MONTH FROM FECHAALTA),4)+1) AS SMALLINT) as NFILA');
tiSemestral : SQL.Add(',CAST((DIV(EXTRACT(MONTH FROM FECHAALTA),8)+1) AS SMALLINT) as NFILA');
end;
SQL.Add(',COUNT(P.CODIGO) as NUMPRE');
SQL.Add('from PRESUPUESTOSCLIENTE P');
SQL.Add('where P.CODIGOEMPRESA = :CODIGOEMPRESA');
SQL.Add('and (EXTRACT(YEAR FROM P.FECHAALTA) = :ANO1');
SQL.Add('or EXTRACT(YEAR FROM P.FECHAALTA) = :ANO2)');
SQL.Add('and upper(SITUACION) = :SITUACION');
SQL.Add('group by 1,2');
if (not VarIsNull(Ano2)) and (Ano1 < Ano2)
then SQL.Add('order by 1,2 asc')
else SQL.Add('order by 1 desc,2 asc');
try
ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
ParamByName('ANO1').AsString := Ano1;
//En el caso de no compara con otro a<>o se busca solo el a<>o1
if VarIsNull(Ano2)
then ParamByName('ANO2').AsString := Ano1
else ParamByName('ANO2').AsString := Ano2;
ParamByName('SITUACION').AsString := pSituacion;
Prepare;
ExecQuery;
//Rellenamos los grid resultado
TMemAnoCom1.First;
TMemAnoCom2.First;
TMemComparativa.First;
TMemGraficoAno1.First;
TMemGraficoAno2.First;
//Inicio de recorrido del resultado
while not EOF do begin
//Rellenamos los datos del A<>o1
if (FieldByName('ANO').AsString = Ano1) then
begin
//En el caso de solo tener datos en ciertos intervalos, los que no tienen datos los
//no los rellenamos
while TMemAnoCom1.FieldByName(CTE_CAMPO1).AsInteger <> FieldByName(CTE_CAMPO1).AsInteger do
begin
TMemAnoCom1.Next;
TMemGraficoAno1.Next;
end;
//Metemos el dato obtenido en la sql en su intervalo correspondiente
TMemAnoCom1.Edit;
TMemAnoCom1.FieldByName(pSituacion).AsInteger := FieldByName('NUMPRE').AsInteger;
TMemAnoCom1.Post;
TMemGraficoAno1.Edit;
TMemGraficoAno1.FieldByName(pSituacion).AsInteger := FieldByName('NUMPRE').AsInteger;
TMemGraficoAno1.Post;
//Vamos incrementando la suma total
TotalAno1 := TotalAno1 + FieldByName('NUMPRE').AsInteger;
TMemAnoCom1.Next;
TMemGraficoAno1.Next;
end
//Rellenamos los datos del A<>o2
else
begin
//Si es la primera tupla del recordset de este a<>o establecemos el semaforo
//y la tabla de datos del A<>o1 en el primer elemento para tener en cuenta los
//datos de dicha tabla en lugar de los del recordset para el A<>o1
if not Semaforo then
begin
TMemAnoCom1.First;
Semaforo := True;
end
else
TMemAnoCom1.Next;
//En el caso de solo tener datos en ciertos intervalos, los que no tienen datos los
//no los rellenamos
while TMemAnoCom2.FieldByName(CTE_CAMPO1).AsInteger <> FieldByName(CTE_CAMPO1).AsInteger do
begin
//Calculamos TablaComaprativa
//En el caso de no existir el valor en A<>o1 o en A<>o2 de este determinado intervalo
//no rellenariamos calculo ninguno
if (not VarIsNull(TMemAnoCom1.FieldByName(pSituacion).AsVariant))
and (not VarIsNull(TMemAnoCom2.FieldByName(pSituacion).AsVariant)) then
begin
TMemComparativa.Edit;
TMemComparativa.FieldByName(pSituacion).AsInteger := TMemAnoCom1.FieldByName(pSituacion).AsInteger;
TMemComparativa.Post;
end;
TMemComparativa.Next;
TMemAnoCom2.Next;
TMemAnoCom1.Next;
TMemGraficoAno2.Next;
end;
//Metemos el dato obtenido en la sql en su intervalo correspondiente y calculamos
TMemAnoCom2.Edit;
TMemAnoCom2.FieldByName(pSituacion).AsInteger := FieldByName('NUMPRE').AsInteger;
TMemAnoCom2.Post;
TMemGraficoAno2.Edit;
TMemGraficoAno2.FieldByName(pSituacion).AsInteger := FieldByName('NUMPRE').AsInteger;
TMemGraficoAno2.Post;
//Calculamos TablaComaprativa
//En el caso de no existir el valor en A<>o1 o A<>o2 de este determinado intervalo
//no rellenariamos calculo ninguno
if (not VarIsNull(TMemAnoCom1.FieldByName(pSituacion).AsVariant))
and (not VarIsNull(TMemAnoCom1.FieldByName(pSituacion).AsVariant)) then
begin
TMemComparativa.Edit;
TMemComparativa.FieldByName(pSituacion).AsInteger := CalcularResta(TMemAnoCom1.FieldByName(pSituacion).AsInteger, TMemAnoCom2.FieldByName(pSituacion).AsInteger);
TMemComparativa.Post;
end;
//Vamos incrementando la suma total
TotalAno2 := TotalAno2 + FieldByName('NUMPRE').AsInteger;
TMemComparativa.Next;
TMemAnoCom2.Next;
TMemGraficoAno2.Next;
end;
Next;
end;
//Fin de recorrido del resultado
Result := True;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TfrInformeEstPresupuestos.CalcularResumen1: Boolean;
var
NumeroCampo : Integer;
ImporteTotal : Double;
Contador : Integer;
begin
with TablaResumen1 do
begin
Close;
Params.ByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
Params.ByName('ANO').AsString := Ano1;
Params.ByName('SITUACION').AsString := CTE_ACEPTADO;
Prepare;
Open;
//Borramos tabla y copiamos nuevamente la estructura
TablaResumen1Mem.Close;
TablaResumen1Mem.CopyStructure(TablaResumen1);
//A<>adimos el campo numero de fila
TablaResumen1Mem.FieldDefs.Add(CTE_CAMPO1,ftInteger);
TablaResumen1Mem.FieldDefs.Items[TablaResumen1Mem.FieldDefs.IndexOf(CTE_CAMPO1)].CreateField(Self);
//Primera pasada donde sumamos el importe total
ImporteTotal := 0;
First;
while not EOF do
begin
ImporteTotal := ImporteTotal + FieldByName('IMPORTETOTAL').AsFloat;
Next;
end;
//Segunda pasada donde rellenamos con los primeros Top N de la lista
if not IsEmpty then
begin
TablaResumen1Mem.DisableControls;
TablaResumen1Mem.Open;
First;
Contador := 0;
while ((not EOF) and (Contador < TopN)) do
begin
TablaResumen1Mem.Append;
TablaResumen1Mem.FieldByName(CTE_CAMPO1).AsInteger := Contador + 1;
for NumeroCampo := 0 to FieldCount-1 do
begin
if Fields[NumeroCampo].FieldName = 'PORCENTAJE' then
TablaResumen1Mem.Fields[NumeroCampo].AsFloat := CalcularPorcentaje(ImporteTotal, Fields[NumeroCampo].AsFloat, False)
else
TablaResumen1Mem.Fields[NumeroCampo].AsString := Fields[NumeroCampo].AsString;
end;
TablaResumen1Mem.Post;
Contador := Contador + 1;
Next;
end;
TablaResumen1Mem.EnableControls;
end;
//Calculamos el nuevo height
Contador := Contador + 1;
pnlGrid.Height := (gridResumen.DefaultRowHeight) * Contador;
end;
end;
function TfrInformeEstPresupuestos.CalcularResumen2: Boolean;
var
NumeroCampo : Integer;
Contador : Integer;
CodigosCliente : TStringList;
begin
CodigosCliente:= TStringList.Create;
with TablaResumen2 do
begin
Close;
Params.ByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
Params.ByName('ANO').AsString := Ano1;
Params.ByName('SITUACION').AsString := CTE_ACEPTADO;
Prepare;
Open;
//Borramos tabla y copiamos nuevamente la estructura
TablaResumen2Mem.Close;
TablaResumen2Mem.CopyStructure(TablaResumen2);
//A<>adimos el campo numero de fila
TablaResumen2Mem.FieldDefs.Add(CTE_CAMPO1,ftInteger);
TablaResumen2Mem.FieldDefs.Items[TablaResumen2Mem.FieldDefs.IndexOf(CTE_CAMPO1)].CreateField(Self);
//Pasada donde rellenamos con los primeros Top N de la lista
if not IsEmpty then
begin
TablaResumen2Mem.DisableControls;
TablaResumen2Mem.Open;
First;
Contador := 0;
while ((not EOF) and (Contador < TopN)) do
begin
TablaResumen2Mem.Append;
TablaResumen2Mem.FieldByName(CTE_CAMPO1).AsInteger := Contador + 1;
for NumeroCampo := 0 to FieldCount-1 do
begin
if Fields[NumeroCampo].FieldName = 'CODIGOCLIENTE' then
CodigosCliente.Append(Fields[NumeroCampo].AsString);
TablaResumen2Mem.Fields[NumeroCampo].AsString := Fields[NumeroCampo].AsString;
end;
TablaResumen2Mem.Post;
Contador := Contador + 1;
Next;
end;
//Calculamos y rellenamos los anulados y pendientes de los TopN, se hacen dos
//accesos a base de datos porque obtener una unica SQL todo seria muy pesada
CalcularResumen23Aux(CodigosCliente, CTE_ANULADO, @TablaResumen2Mem);
CalcularResumen23Aux(CodigosCliente, CTE_PENDIENTE, @TablaResumen2Mem);
TablaResumen2Mem.EnableControls;
end;
//Calculamos el nuevo height
Contador := Contador + 1;
pnlGrid2.Height := (gridResumen2.DefaultRowHeight) * Contador;
end;
end;
function TfrInformeEstPresupuestos.CalcularResumen23Aux(const CodigosCliente: TStringList;
const pSituacion: String; Tabla: TPTablaMem): Boolean;
var
oSQL : TIBSQL;
i: Integer;
Cadena: String;
begin
if CodigosCliente.Count = 0 then
exit;
for i:=0 to CodigosCliente.Count-1 do
begin
//En el caso de ser un cliente que solo este en el presupuesto y no en la aplicacion
if not esCadenaVacia(CodigosCliente.Strings[i]) then
begin
if i=0 then
Cadena:= CodigosCliente.Strings[i]
else
Cadena:= Cadena + ', ' + CodigosCliente.Strings[i];
end;
end;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select EXTRACT(YEAR FROM P.FECHAALTA) as ANO, P.CODIGOCLIENTE, COALESCE(C.NOMBRE, P.NOMBRE) as NOMBRE,');
SQL.Add('COUNT(P.CODIGO) as NUMPRE');
SQL.Add('from PRESUPUESTOSCLIENTE P left join CLIENTES C');
SQL.Add('on P.CODIGOCLIENTE = C.CODIGO');
SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
SQL.Add('and EXTRACT(YEAR FROM FECHAALTA) = :ANO');
SQL.Add('and upper(SITUACION) = :SITUACION');
SQL.Add('and CODIGOCLIENTE in (' + Cadena + ')');
SQL.Add('group by 1,2,3');
SQL.Add('order by 2 desc');
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
ParamByName('ANO').AsInteger := Ano1;
ParamByName('SITUACION').AsString := pSituacion;
try
Prepare;
ExecQuery;
Tabla^.DisableControls;
while not EOF do
begin
Tabla^.First;
while (Tabla^.FieldByName('CODIGOCLIENTE').AsString <> FieldbyName('CODIGOCLIENTE').AsString) do
Tabla^.Next;
Tabla^.Edit;
Tabla^.FieldByName(pSituacion).AsInteger := FieldbyName('NUMPRE').AsInteger;
Tabla^.Post;
Next;
end;
Tabla^.EnableControls;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TfrInformeEstPresupuestos.CalcularResumen3: Boolean;
var
NumeroCampo : Integer;
Contador : Integer;
CodigosCliente : TStringList;
begin
CodigosCliente:= TStringList.Create;
with TablaResumen3 do
begin
Close;
Params.ByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
Params.ByName('ANO').AsString := Ano1;
Params.ByName('SITUACION').AsString := CTE_ANULADO;
Prepare;
Open;
//Borramos tabla y copiamos nuevamente la estructura
TablaResumen3Mem.Close;
TablaResumen3Mem.CopyStructure(TablaResumen3);
//A<>adimos el campo numero de fila
TablaResumen3Mem.FieldDefs.Add(CTE_CAMPO1,ftInteger);
TablaResumen3Mem.FieldDefs.Items[TablaResumen3Mem.FieldDefs.IndexOf(CTE_CAMPO1)].CreateField(Self);
//Pasada donde rellenamos con los primeros Top N de la lista
if not IsEmpty then
begin
TablaResumen3Mem.DisableControls;
TablaResumen3Mem.Open;
First;
Contador := 0;
while ((not EOF) and (Contador < TopN)) do
begin
TablaResumen3Mem.Append;
TablaResumen3Mem.FieldByName(CTE_CAMPO1).AsInteger := Contador + 1;
for NumeroCampo := 0 to FieldCount-1 do
begin
if Fields[NumeroCampo].FieldName = 'CODIGOCLIENTE' then
CodigosCliente.Append(Fields[NumeroCampo].AsString);
TablaResumen3Mem.Fields[NumeroCampo].AsString := Fields[NumeroCampo].AsString;
end;
TablaResumen3Mem.Post;
Contador := Contador + 1;
Next;
end;
//Calculamos y rellenamos los anulados y pendientes de los TopN, se hacen dos
//accesos a base de datos porque obtener una unica SQL todo seria muy pesada
CalcularResumen23Aux(CodigosCliente, CTE_ACEPTADO, @TablaResumen3Mem);
CalcularResumen23Aux(CodigosCliente, CTE_PENDIENTE, @TablaResumen3Mem);
TablaResumen3Mem.EnableControls;
end;
//Calculamos el nuevo height
Contador := Contador + 1;
pnlGrid3.Height := (gridResumen3.DefaultRowHeight) * Contador;
end;
end;
function TfrInformeEstPresupuestos.FinalizarResumen1: Boolean;
begin
sqlResumen1.Free;
TablaResumen1Mem.Close;
TablaResumen1.Close;
TablaResumen1.UnPrepare;
TablaResumen1.Free;
end;
function TfrInformeEstPresupuestos.FinalizarResumen2: Boolean;
begin
sqlResumen2.Free;
TablaResumen2Mem.Close;
TablaResumen2.Close;
TablaResumen2.UnPrepare;
TablaResumen2.Free;
end;
function TfrInformeEstPresupuestos.FinalizarResumen3: Boolean;
begin
sqlResumen3.Free;
TablaResumen3Mem.Close;
TablaResumen3.Close;
TablaResumen3.UnPrepare;
TablaResumen3.Free;
end;
function TfrInformeEstPresupuestos.FinalizarResumenes: Boolean;
begin
FinalizarResumen1;
FinalizarResumen2;
FinalizarResumen3;
end;
procedure TfrInformeEstPresupuestos.gridCustomDrawCell(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
var AText: String; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean);
var
IndiceCol: Integer;
begin
inherited;
if ((Sender as TdxDBGrid).Name = gridComparativa.Name) then
begin
if (AColumn.Caption = CTE_ACEPTADO) then
begin
IndiceCol := (Sender as TdxDBGrid).ColumnByFieldName(CTE_ACEPTADO).Index;
if (ANode.Values[IndiceCol] < 0) then
AFont.Color := COLOR_NEGATIVO
else
AFont.Color := COLOR_POSITIVO;
end;
if (AColumn.Caption = CTE_ANULADO) then
begin
IndiceCol := (Sender as TdxDBGrid).ColumnByFieldName(CTE_ANULADO).Index;
if (ANode.Values[IndiceCol] < 0) then
AFont.Color := COLOR_NEGATIVO
else
AFont.Color := COLOR_POSITIVO;
end;
if (AColumn.Caption = CTE_PENDIENTE) then
begin
IndiceCol := (Sender as TdxDBGrid).ColumnByFieldName(CTE_PENDIENTE).Index;
if (ANode.Values[IndiceCol] < 0) then
AFont.Color := COLOR_NEGATIVO
else
AFont.Color := COLOR_POSITIVO;
end;
end;
end;
function TfrInformeEstPresupuestos.InicializarCamposTMem: Boolean;
begin
inherited InicializarCamposTMem;
//ANO1
TMemAnoCom1.FieldDefs.Add(CTE_ACEPTADO,ftInteger);
TMemAnoCom1.FieldDefs.Items[TMemAnoCom1.FieldDefs.IndexOf(CTE_ACEPTADO)].CreateField(Self);
TMemAnoCom1.FieldDefs.Add(CTE_ANULADO,ftInteger);
TMemAnoCom1.FieldDefs.Items[TMemAnoCom1.FieldDefs.IndexOf(CTE_ANULADO)].CreateField(Self);
TMemAnoCom1.FieldDefs.Add(CTE_PENDIENTE,ftInteger);
TMemAnoCom1.FieldDefs.Items[TMemAnoCom1.FieldDefs.IndexOf(CTE_PENDIENTE)].CreateField(Self);
//ANO2
TMemAnoCom2.FieldDefs.Add(CTE_ACEPTADO,ftInteger);
TMemAnoCom2.FieldDefs.Items[TMemAnoCom2.FieldDefs.IndexOf(CTE_ACEPTADO)].CreateField(Self);
TMemAnoCom2.FieldDefs.Add(CTE_ANULADO,ftInteger);
TMemAnoCom2.FieldDefs.Items[TMemAnoCom2.FieldDefs.IndexOf(CTE_ANULADO)].CreateField(Self);
TMemAnoCom2.FieldDefs.Add(CTE_PENDIENTE,ftInteger);
TMemAnoCom2.FieldDefs.Items[TMemAnoCom2.FieldDefs.IndexOf(CTE_PENDIENTE)].CreateField(Self);
//COMPARATIVA
TMemComparativa.FieldDefs.Add(CTE_ACEPTADO,ftInteger);
TMemComparativa.FieldDefs.Items[TMemComparativa.FieldDefs.IndexOf(CTE_ACEPTADO)].CreateField(Self);
TMemComparativa.FieldDefs.Add(CTE_ANULADO,ftInteger);
TMemComparativa.FieldDefs.Items[TMemComparativa.FieldDefs.IndexOf(CTE_ANULADO)].CreateField(Self);
TMemComparativa.FieldDefs.Add(CTE_PENDIENTE,ftInteger);
TMemComparativa.FieldDefs.Items[TMemComparativa.FieldDefs.IndexOf(CTE_PENDIENTE)].CreateField(Self);
//Grafico
TMemGraficoAno1.FieldDefs.Add(CTE_ACEPTADO,ftInteger);
TMemGraficoAno1.FieldDefs.Items[TMemGraficoAno1.FieldDefs.IndexOf(CTE_ACEPTADO)].CreateField(Self);
TMemGraficoAno1.FieldDefs.Add(CTE_ANULADO,ftInteger);
TMemGraficoAno1.FieldDefs.Items[TMemGraficoAno1.FieldDefs.IndexOf(CTE_ANULADO)].CreateField(Self);
TMemGraficoAno1.FieldDefs.Add(CTE_PENDIENTE,ftInteger);
TMemGraficoAno1.FieldDefs.Items[TMemGraficoAno1.FieldDefs.IndexOf(CTE_PENDIENTE)].CreateField(Self);
TMemGraficoAno2.FieldDefs.Add(CTE_ACEPTADO,ftInteger);
TMemGraficoAno2.FieldDefs.Items[TMemGraficoAno2.FieldDefs.IndexOf(CTE_ACEPTADO)].CreateField(Self);
TMemGraficoAno2.FieldDefs.Add(CTE_ANULADO,ftInteger);
TMemGraficoAno2.FieldDefs.Items[TMemGraficoAno2.FieldDefs.IndexOf(CTE_ANULADO)].CreateField(Self);
TMemGraficoAno2.FieldDefs.Add(CTE_PENDIENTE,ftInteger);
TMemGraficoAno2.FieldDefs.Items[TMemGraficoAno1.FieldDefs.IndexOf(CTE_PENDIENTE)].CreateField(Self);
end;
function TfrInformeEstPresupuestos.InicializarFiltros: Boolean;
begin
inherited InicializarFiltros;
AnosMem := dmTablaPresupuestos.DarListaAnos(EmpresaActiva.Codigo, False);
cbxFiltroGrafico.Items.Append(CTE_TODOS);
cbxFiltroGrafico.Items.Append('Aceptados');
cbxFiltroGrafico.Items.Append('Anulados');
cbxFiltroGrafico.Items.Append('Pendientes');
cbxFiltroGrafico.ItemIndex := 0;
DBChart1.Title.Text.Text := CTE_TODOS;
end;
procedure TfrInformeEstPresupuestos.InicializarGridResumen1(
var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
gridResumen.ShowHeader := False;
cResumen1.Caption := msgInfEstPreResumen1;
with Grid do begin
DestroyColumns;
{Columna CODIGOCLIENTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_CAMPO1;
Columna.Caption := 'NFila';
Columna.Width := tamColCodigo2;
Columna.Visible := False;
{Columna CODIGOCLIENTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGOCLIENTE';
Columna.Caption := 'C<>digo';
Columna.Width := tamColCodigo2;
Columna.Visible := False;
{Columna NOMBRE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'NOMBRE';
Columna.Caption := 'Nombre';
Columna.Width := tamColDescripcion2;
{Columna NUMPRE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'NUMPRE';
Columna.Caption := 'N<>m. presupuestos';
Columna.Width := tamColPrecio;
{Columna NUMPRE}
Columna := CreateColumn(TdxDBGridCurrencyColumn);
Columna.FieldName := 'IMPORTETOTAL';
Columna.Caption := 'Importe total';
Columna.Width := tamColPrecio;
(Columna as TdxDBGridCurrencyColumn).DisplayFormat := DISPLAY_EUROS2;
{Columna PORCENTAJE}
Columna := CreateColumn(TdxDBGridCurrencyColumn);
Columna.FieldName := 'PORCENTAJE';
Columna.Caption := 'Porcentaje(%)';
Columna.Width := tamColPorcentaje2;
(Columna as TdxDBGridCurrencyColumn).DisplayFormat := DISPLAY_PORCENTAJE;
end;
end;
procedure TfrInformeEstPresupuestos.InicializarGridResumen2(
var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
gridResumen2.ShowHeader := False;
cResumen2.Caption := msgInfEstPreResumen2;
with Grid do begin
DestroyColumns;
{Columna CODIGOCLIENTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_CAMPO1;
Columna.Caption := 'NFila';
Columna.Width := tamColCodigo2;
Columna.Visible := False;
{Columna CODIGOCLIENTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGOCLIENTE';
Columna.Caption := 'C<>digo';
Columna.Width := tamColCodigo2;
Columna.Visible := False;
{Columna NOMBRE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'NOMBRE';
Columna.Caption := 'Nombre';
Columna.Width := tamColDescripcion2;
{Columna ACEPTADO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'ACEPTADO';
Columna.Caption := 'N<>m. pre. Aceptados';
Columna.Width := tamColPreAceAnuPen;
{Columna ANULADO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'ANULADO';
Columna.Caption := 'N<>m. pre. Anulados';
Columna.Width := tamColPreAceAnuPen;
{Columna PENDIENTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PENDIENTE';
Columna.Caption := 'N<>m. pre. Pendientes';
Columna.Width := tamColPreAceAnuPen;
end;
end;
procedure TfrInformeEstPresupuestos.InicializarGridResumen3(
var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
gridResumen3.ShowHeader := False;
cResumen3.Caption := msgInfEstPreResumen3;
with Grid do begin
DestroyColumns;
{Columna CODIGOCLIENTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_CAMPO1;
Columna.Caption := 'NFila';
Columna.Width := tamColCodigo2;
Columna.Visible := False;
{Columna CODIGOCLIENTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGOCLIENTE';
Columna.Caption := 'C<>digo';
Columna.Width := tamColCodigo2;
Columna.Visible := False;
{Columna NOMBRE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'NOMBRE';
Columna.Caption := 'Nombre';
Columna.Width := tamColDescripcion2;
{Columna ANULADO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'ANULADO';
Columna.Caption := 'N<>m. pre. Anulados';
Columna.Width := tamColPreAceAnuPen;
{Columna ACEPTADO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'ACEPTADO';
Columna.Caption := 'N<>m. pre. Aceptados';
Columna.Width := tamColPreAceAnuPen;
{Columna PENDIENTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PENDIENTE';
Columna.Caption := 'N<>m. pre. Pendientes';
Columna.Width := tamColPreAceAnuPen;
end;
end;
function TfrInformeEstPresupuestos.InicializarGrids: Boolean;
var
Columna : TdxDBTreeListColumn;
begin
inherited InicializarGrids;
//Titulo general
cGeneral.Caption := msgInfEstPreGeneral;
//ANO1
Columna := gridAnoCom1.CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_ACEPTADO;
Columna.Caption := CTE_ACEPTADO;
Columna.Visible := True;
Columna := gridAnoCom1.CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_ANULADO;
Columna.Caption := CTE_ANULADO;
Columna.Visible := True;
Columna := gridAnoCom1.CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_PENDIENTE;
Columna.Caption := CTE_PENDIENTE;
Columna.Visible := True;
//ANO2
Columna := gridAnoCom2.CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_ACEPTADO;
Columna.Caption := CTE_ACEPTADO;
Columna.Visible := True;
Columna := gridAnoCom2.CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_ANULADO;
Columna.Caption := CTE_ANULADO;
Columna.Visible := True;
Columna := gridAnoCom2.CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_PENDIENTE;
Columna.Caption := CTE_PENDIENTE;
Columna.Visible := True;
//COMPARATIVA
Columna := gridComparativa.CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_ACEPTADO;
Columna.Caption := CTE_ACEPTADO;
Columna.Width := tamColPorcentaje;
Columna.Visible := True;
Columna := gridComparativa.CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_ANULADO;
Columna.Caption := CTE_ANULADO;
Columna.Width := tamColPorcentaje;
Columna.Visible := True;
Columna := gridComparativa.CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_PENDIENTE;
Columna.Caption := CTE_PENDIENTE;
Columna.Width := tamColPorcentaje;
Columna.Visible := True;
gridIntervalo.ShowHeader := False;
gridAnoCom1.ShowHeader := False;
gridAnoCom2.ShowHeader := False;
gridComparativa.ShowHeader := False;
end;
function TfrInformeEstPresupuestos.InicializarResumen1: Boolean;
begin
Result := False;
try
sqlResumen1 := TStringList.Create;
with sqlResumen1 do
begin
Add('select EXTRACT(YEAR FROM P.FECHAALTA) as ANO, P.CODIGOCLIENTE, COALESCE(C.NOMBRE, P.NOMBRE) as NOMBRE, ');
Add('COUNT(P.CODIGO) as NUMPRE, SUM(P.IMPORTETOTAL) as IMPORTETOTAL, SUM(P.IMPORTETOTAL) as PORCENTAJE ');
Add('from PRESUPUESTOSCLIENTE P left join CLIENTES C ');
Add('on P.CODIGOCLIENTE = C.CODIGO ');
Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
Add('and EXTRACT(YEAR FROM FECHAALTA) = :ANO ');
Add('and upper(SITUACION) = :SITUACION ');
Add('group by 1,2,3 ');
Add('order by 1,5 desc ');
end;
TablaResumen1 := TIBDataSet.Create(Self);
with TablaResumen1 do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SelectSQL.Assign(sqlResumen1);
end;
InicializarGridResumen1(gridResumen);
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrInformeEstPresupuestos.InicializarResumen2: Boolean;
begin
Result := False;
try
sqlResumen2 := TStringList.Create;
with sqlResumen2 do
begin
Add('select EXTRACT(YEAR FROM P.FECHAALTA) as ANO, P.CODIGOCLIENTE, COALESCE(C.NOMBRE, P.NOMBRE) as NOMBRE,');
Add('COUNT(P.CODIGO) as ACEPTADO, 0 as ANULADO, 0 as PENDIENTE');
Add('from PRESUPUESTOSCLIENTE P left join CLIENTES C');
Add('on P.CODIGOCLIENTE = C.CODIGO');
Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
Add('and EXTRACT(YEAR FROM FECHAALTA) = :ANO');
Add('and upper(SITUACION) = :SITUACION');
Add('group by 1,2,3');
Add('order by 4 desc');
end;
TablaResumen2 := TIBDataSet.Create(Self);
with TablaResumen2 do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SelectSQL.Assign(sqlResumen2);
end;
InicializarGridResumen2(gridResumen2);
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrInformeEstPresupuestos.InicializarResumen3: Boolean;
begin
Result := False;
try
sqlResumen3 := TStringList.Create;
with sqlResumen3 do
begin
Add('select EXTRACT(YEAR FROM P.FECHAALTA) as ANO, P.CODIGOCLIENTE, COALESCE(C.NOMBRE, P.NOMBRE) as NOMBRE,');
Add('COUNT(P.CODIGO) as ANULADO, 0 as ACEPTADO, 0 as PENDIENTE');
Add('from PRESUPUESTOSCLIENTE P left join CLIENTES C');
Add('on P.CODIGOCLIENTE = C.CODIGO');
Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
Add('and EXTRACT(YEAR FROM FECHAALTA) = :ANO');
Add('and upper(SITUACION) = :SITUACION');
Add('group by 1,2,3');
Add('order by 4 desc');
end;
TablaResumen3 := TIBDataSet.Create(Self);
with TablaResumen3 do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SelectSQL.Assign(sqlResumen3);
end;
InicializarGridResumen3(gridResumen3);
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrInformeEstPresupuestos.InicializarResumenes: Boolean;
begin
InicializarResumen1;
InicializarResumen2;
InicializarResumen3;
end;
procedure TfrInformeEstPresupuestos.limpiarTotales;
begin
pnlA1T1.Caption := '';
pnlA1T2.Caption := '';
pnlA1T3.Caption := '';
pnlA2T1.Caption := '';
pnlA2T2.Caption := '';
pnlA2T3.Caption := '';
pnlA3T1.Caption := '';
pnlA3T2.Caption := '';
pnlA3T3.Caption := '';
end;
function TfrInformeEstPresupuestos.RefrescarResumenes: Boolean;
begin
CalcularResumen1;
CalcularResumen2;
CalcularResumen3;
end;
procedure TfrInformeEstPresupuestos.bCancelarClick(Sender: TObject);
begin
CloseFrame;
end;
procedure TfrInformeEstPresupuestos.bImprimirClick(Sender: TObject);
var
lInforme: TdmInfEstReportPresupuestos;
DatosGenerales: TRxMemoryData;
begin
try
//Creamos informe
lInforme:= TdmInfEstReportPresupuestos.Create(Self);
//Asignamos la informaci<63>n al informe
lInforme.Ano1 := Ano1;
lInforme.Ano2 := Ano2;
//Creamos una tabla con todos los datos del informe general, y la pasamos
//al informe para que la copie, luego los destruimos
DatosGenerales := GenerarTablaInforme;
lInforme.setDatosGeneral(DatosGenerales);
lInforme.A1T1 := pnlA1T1.Caption;
lInforme.A1T2 := pnlA1T2.Caption;
lInforme.A1T3 := pnlA1T3.Caption;
lInforme.A2T1 := pnlA2T1.Caption;
lInforme.A2T2 := pnlA2T2.Caption;
lInforme.A2T3 := pnlA2T3.Caption;
lInforme.A3T1 := pnlA3T1.Caption;
lInforme.A3T2 := pnlA3T2.Caption;
lInforme.A3T3 := pnlA3T3.Caption;
//Creamos una imagen del grafico para luego insertarla en el informe
lInforme.Fichero := DarFicheroBMPTemporal;
DBChart1.SaveToBitmapFile(lInforme.Fichero);
//Copiamos la informaci<63>n al informe
lInforme.setDatosResumen1(TablaResumen1Mem);
lInforme.setDatosResumen2(TablaResumen2Mem);
lInforme.setDatosResumen3(TablaResumen3Mem);
//Imprimimos
// lInforme.Previsualizar;
lInforme.Imprimir;
finally
FreeAndNil(DatosGenerales);
DeleteFile(lInforme.Fichero);
FreeAndNil(lInforme);
end;
end;
function TfrInformeEstPresupuestos.GenerarTablaInforme: TRxMemoryData;
var
TablaAux: TRxMemoryData;
begin
//Creamos la tabla con los campos que vamos a tener para el informe
TablaAux:= TRxMemoryData.Create(Self);
with TablaAux do
begin
FieldDefs.Add('TITINTERVALO',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('TITINTERVALO')].CreateField(Self);
FieldDefs.Add('ANO1ACE',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('ANO1ACE')].CreateField(Self);
FieldDefs.Add('ANO1ANU',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('ANO1ANU')].CreateField(Self);
FieldDefs.Add('ANO1PEN',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('ANO1PEN')].CreateField(Self);
FieldDefs.Add('ANO2ACE',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('ANO2ACE')].CreateField(Self);
FieldDefs.Add('ANO2ANU',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('ANO2ANU')].CreateField(Self);
FieldDefs.Add('ANO2PEN',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('ANO2PEN')].CreateField(Self);
FieldDefs.Add('ANO3ACE',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('ANO3ACE')].CreateField(Self);
FieldDefs.Add('ANO3ANU',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('ANO3ANU')].CreateField(Self);
FieldDefs.Add('ANO3PEN',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('ANO3PEN')].CreateField(Self);
end;
TablaAux.Open;
//Rellenamos el campo TITINTERVALO
with TMemIntervalo do
begin
DisableControls;
First;
while not Eof do
begin
TablaAux.Append;
TablaAux.FieldByName('TITINTERVALO').AsString := FieldByName('TITINTERVALO').AsString;
TablaAux.Post;
Next;
end;
EnableControls;
end;
//Rellenamos los campos ANO1ACE, ANO1ANU, ANO1PEN
with TMemAnoCom1 do
begin
DisableControls;
First;
TablaAux.First;
while not Eof do
begin
TablaAux.Edit;
TablaAux.FieldByName('ANO1ACE').AsString := FieldByName(CTE_ACEPTADO).AsString;
TablaAux.FieldByName('ANO1ANU').AsString := FieldByName(CTE_ANULADO).AsString;
TablaAux.FieldByName('ANO1PEN').AsString := FieldByName(CTE_PENDIENTE).AsString;
TablaAux.Post;
TablaAux.Next;
Next;
end;
EnableControls;
end;
//Rellenamos los campos ANO2ACE, ANO2ANU, ANO2PEN
with TMemAnoCom2 do
begin
DisableControls;
First;
TablaAux.First;
while not Eof do
begin
TablaAux.Edit;
TablaAux.FieldByName('ANO2ACE').AsString := FieldByName(CTE_ACEPTADO).AsString;
TablaAux.FieldByName('ANO2ANU').AsString := FieldByName(CTE_ANULADO).AsString;
TablaAux.FieldByName('ANO2PEN').AsString := FieldByName(CTE_PENDIENTE).AsString;
TablaAux.Post;
TablaAux.Next;
Next;
end;
EnableControls;
end;
//Rellenamos los campos ANO3ACE, ANO3ANU, ANO3PEN
with TMemComparativa do
begin
DisableControls;
First;
TablaAux.First;
while not Eof do
begin
TablaAux.Edit;
TablaAux.FieldByName('ANO3ACE').AsString := FieldByName(CTE_ACEPTADO).AsString;
TablaAux.FieldByName('ANO3ANU').AsString := FieldByName(CTE_ANULADO).AsString;
TablaAux.FieldByName('ANO3PEN').AsString := FieldByName(CTE_PENDIENTE).AsString;
TablaAux.Post;
TablaAux.Next;
Next;
end;
EnableControls;
end;
Result:= TablaAux;
end;
procedure TfrInformeEstPresupuestos.cbxFiltroGraficoChange(
Sender: TObject);
begin
if cbxFiltroGrafico.Text = CTE_TODOS then
begin
DBChart1.SeriesList.Series[0].Active := True;
DBChart1.SeriesList.Series[1].Active := True;
DBChart1.SeriesList.Series[2].Active := True;
DBChart1.SeriesList.Series[3].Active := True;
DBChart1.SeriesList.Series[4].Active := True;
DBChart1.SeriesList.Series[5].Active := True;
DBChart1.Title.Text.Text := CTE_TODOS;
end
else if cbxFiltroGrafico.Text = 'Aceptados' then
begin
DBChart1.SeriesList.Series[0].Active := True;
DBChart1.SeriesList.Series[1].Active := False;
DBChart1.SeriesList.Series[2].Active := False;
DBChart1.SeriesList.Series[3].Active := True;
DBChart1.SeriesList.Series[4].Active := False;
DBChart1.SeriesList.Series[5].Active := False;
DBChart1.Title.Text.Text := 'Aceptados';
end
else if cbxFiltroGrafico.Text = 'Anulados' then
begin
DBChart1.SeriesList.Series[0].Active := False;
DBChart1.SeriesList.Series[1].Active := True;
DBChart1.SeriesList.Series[2].Active := False;
DBChart1.SeriesList.Series[3].Active := False;
DBChart1.SeriesList.Series[4].Active := True;
DBChart1.SeriesList.Series[5].Active := False;
DBChart1.Title.Text.Text := 'Anulados';
end
else if cbxFiltroGrafico.Text = 'Pendientes' then
begin
DBChart1.SeriesList.Series[0].Active := False;
DBChart1.SeriesList.Series[1].Active := False;
DBChart1.SeriesList.Series[2].Active := True;
DBChart1.SeriesList.Series[3].Active := False;
DBChart1.SeriesList.Series[4].Active := False;
DBChart1.SeriesList.Series[5].Active := True;
DBChart1.Title.Text.Text := 'Pendientes';
end;
end;
constructor TfrInformeEstPresupuestos.Create(AOwner: TComponent);
begin
inherited;
Entidad := entInfEstPreCli;
ConfigurarFrame(Self, Self.Entidad);
end;
procedure TfrInformeEstPresupuestos.SetAno2(const Value: Variant);
begin
inherited;
if not VarIsNull(Ano2) then
etiComp.Caption := msgInfEstTit31 + IntToStr(Ano1) + msgInfEstTit32 + IntToStr(Ano2)
else
etiComp.Caption := '';
end;
end.