1345 lines
44 KiB
ObjectPascal
1345 lines
44 KiB
ObjectPascal
|
|
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.
|