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/InformeEstFacturasCliPro.pas

943 lines
31 KiB
ObjectPascal
Raw Normal View History

unit InformeEstFacturasCliPro;
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, Tipos;
type
TfrInformeEstFacturasCliPro = class(TfrInformeEstadistico)
pnlResumen2: TRdxPanel;
cResumen2: TRdxCabecera;
pnlDatosResumen2: TPanel;
pnlGrid2: TPanel;
gridResumen2: TdxDBGrid;
pnlTitulosResumen2: TPanel;
DBChart1: TDBChart;
Series1: TBarSeries;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
DataSource1: TDataSource;
IBDataSet1: TIBDataSet;
IBDataSet3: TIBDataSet;
IBDataSet2: TIBDataSet;
Series4: TBarSeries;
Label3: TLabel;
Label4: TLabel;
Label7: TLabel;
Label10: TLabel;
pnlA1T1: TLabel;
pnlA2T1: TLabel;
pnlA3T1: TLabel;
Label11: TLabel;
Label12: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
dsResumen2: TDataSource;
TablaResumen2Mem: TRxMemoryData;
Label1: TLabel;
Label13: TLabel;
etiComp: 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);
private
FTotAno11: Double;
FTotAno21: Double;
TablaResumen1 : TIBDataSet;
sqlResumen1 : TStrings;
TablaResumen2 : TIBDataSet;
sqlResumen2 : TStrings;
TablaResumen3 : TIBDataSet;
sqlResumen3 : TStrings;
procedure LimpiarTotales;
function CalcularPre(var TotalAno1: Double; var TotalAno2: Double): 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);
protected
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;
procedure SetAno2(const Value: Variant); override;
public
constructor Create (AOwner : TComponent;Const Entidad : TRdxEntidad); overload;
end;
var
frInformeEstFacturasCliPro: TfrInformeEstFacturasCliPro;
implementation
uses Literales, Constantes, dxGrClms, Mensajes, TablaPresupuestos, RdxEmpresaActiva,
StrFunc, InfEstReportFacturasCliPro, TablaFacturasCliente, TablaFacturasProveedor,
Configuracion, SysFunc;
{$R *.DFM}
{ TfrInformeEstPresupuestos }
{ TfrInformeEstPresupuestos }
function TfrInformeEstFacturasCliPro.CalcularDatos: Boolean;
var
Aux: Double;
i: Integer;
Aux2: String;
begin
LimpiarTotales;
FTotAno11:= 0;
FTotAno21:= 0;
CalcularPre(FTotAno11,FTotAno21);
if FTotAno11 <> 0 then
pnlA1T1.Caption := FormatFloat(DISPLAY_EUROS2, FTotAno11);
//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 := FormatFloat(DISPLAY_EUROS2, FTotAno21);
if CalcularPorcentaje(FTotAno11, FTotAno21, True) < 0 then
pnlA3T1.Font.Color := COLOR_PORCENTAJENEG
else
pnlA3T1.Font.Color := COLOR_PORCENTAJEPOS;
if CalcularPorcentaje(FTotAno11, FTotAno21, True) <> 0 then
pnlA3T1.Caption := FormatFloat(DISPLAY_PORCENTAJE, CalcularPorcentaje(FTotAno11, FTotAno21, True));
end;
for i:=0 to DBChart1.SeriesList.CountActive-1 do
begin
Aux2 := DBChart1.SeriesList.Series[i].Title;
if i=0
then DBChart1.SeriesList.Series[i].Title := ('Total Facturado ' + cbxFiltro2.Text)
else DBChart1.SeriesList.Series[i].Title := ('Total Facturado ' + cbxFiltro3.Text);
DBChart1.SeriesList.Series[i].XLabelsSource := CTE_CAMPO2;
DBChart1.SeriesList.Series[i].XValues.ValueSource := CTE_CAMPO1;
DBChart1.SeriesList.Series[i].YValues.ValueSource := 'IMPORTETOTAL';
end;
end;
function TfrInformeEstFacturasCliPro.CalcularPre(var TotalAno1: Double;
var TotalAno2: Double): 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 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(',SUM(IMPORTETOTAL) as IMPORTETOTAL');
//TIPO INFORME FACTURASCLIENTE/FACTURASPROVEEDOR
Case Entidad of
entInfEstFacPro: SQL.Add('from FACTURASPROVEEDOR');
entVacia, entInfEstFacCli: SQL.Add('from FACTURASCLIENTE');
end;
SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
SQL.Add('and (EXTRACT(YEAR FROM FECHAALTA) = :ANO1');
SQL.Add('or EXTRACT(YEAR FROM FECHAALTA) = :ANO2)');
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;
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('IMPORTETOTAL').AsFloat := FieldByName('IMPORTETOTAL').AsFloat;
TMemAnoCom1.Post;
TMemGraficoAno1.Edit;
TMemGraficoAno1.FieldByName('IMPORTETOTAL').AsFloat := FieldByName('IMPORTETOTAL').AsFloat;
TMemGraficoAno1.Post;
//Vamos incrementando la suma total
TotalAno1 := TotalAno1 + FieldByName('IMPORTETOTAL').AsFloat;
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 A<>o2 de este determinado intervalo
//no rellenariamos calculo ninguno
if (not VarIsNull(TMemAnoCom1.FieldByName('IMPORTETOTAL').AsVariant))
and (not VarIsNull(TMemAnoCom2.FieldByName('IMPORTETOTAL').AsVariant)) then
begin
TMemComparativa.Edit;
TMemComparativa.FieldByName('PORCENTAJE').AsFloat := TMemAnoCom1.FieldByName('IMPORTETOTAL').AsFloat;
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('IMPORTETOTAL').AsFloat := FieldByName('IMPORTETOTAL').AsFloat;
TMemAnoCom2.Post;
TMemGraficoAno2.Edit;
TMemGraficoAno2.FieldByName('IMPORTETOTAL').AsFloat := FieldByName('IMPORTETOTAL').AsFloat;
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('IMPORTETOTAL').AsVariant))
and (not VarIsNull(TMemAnoCom2.FieldByName('IMPORTETOTAL').AsVariant)) then
begin
TMemComparativa.Edit;
TMemComparativa.FieldByName('PORCENTAJE').AsFloat := CalcularPorcentaje(TMemAnoCom1.FieldByName('IMPORTETOTAL').AsFloat, TMemAnoCom2.FieldByName('IMPORTETOTAL').AsFloat, True);
TMemComparativa.Post;
end;
//Vamos incrementando la suma total
TotalAno2 := TotalAno2 + FieldByName('IMPORTETOTAL').AsFloat;
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 TfrInformeEstFacturasCliPro.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;
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 TfrInformeEstFacturasCliPro.CalcularResumen2: Boolean;
var
NumeroCampo : Integer;
Contador : Integer;
begin
with TablaResumen2 do
begin
Close;
Params.ByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo;
Params.ByName('ANO').AsString := Ano1;
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
TablaResumen2Mem.Fields[NumeroCampo].AsString := Fields[NumeroCampo].AsString;
end;
TablaResumen2Mem.Post;
Contador := Contador + 1;
Next;
end;
TablaResumen2Mem.EnableControls;
end;
//Calculamos el nuevo height
Contador := Contador + 1;
pnlGrid2.Height := (gridResumen2.DefaultRowHeight) * Contador;
end;
end;
function TfrInformeEstFacturasCliPro.FinalizarResumen1: Boolean;
begin
sqlResumen1.Free;
TablaResumen1Mem.Close;
TablaResumen1.Close;
TablaResumen1.UnPrepare;
TablaResumen1.Free;
end;
function TfrInformeEstFacturasCliPro.FinalizarResumen2: Boolean;
begin
sqlResumen2.Free;
TablaResumen2Mem.Close;
TablaResumen2.Close;
TablaResumen2.UnPrepare;
TablaResumen2.Free;
end;
function TfrInformeEstFacturasCliPro.FinalizarResumenes: Boolean;
begin
FinalizarResumen1;
FinalizarResumen2;
end;
procedure TfrInformeEstFacturasCliPro.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 = 'PORCENTAJE') then
begin
IndiceCol := (Sender as TdxDBGrid).ColumnByFieldName('PORCENTAJE').Index;
if (ANode.Values[IndiceCol] < 0) then
AFont.Color := COLOR_PORCENTAJENEG
else
AFont.Color := COLOR_PORCENTAJEPOS;
end;
end;
end;
function TfrInformeEstFacturasCliPro.InicializarCamposTMem: Boolean;
begin
inherited InicializarCamposTMem;
//ANO1
TMemAnoCom1.FieldDefs.Add('IMPORTETOTAL',ftFloat);
TMemAnoCom1.FieldDefs.Items[TMemAnoCom1.FieldDefs.IndexOf('IMPORTETOTAL')].CreateField(Self);
//ANO2
TMemAnoCom2.FieldDefs.Add('IMPORTETOTAL',ftFloat);
TMemAnoCom2.FieldDefs.Items[TMemAnoCom2.FieldDefs.IndexOf('IMPORTETOTAL')].CreateField(Self);
//COMPARATIVA
TMemComparativa.FieldDefs.Add('PORCENTAJE',ftFloat);
TMemComparativa.FieldDefs.Items[TMemComparativa.FieldDefs.IndexOf('PORCENTAJE')].CreateField(Self);
//Grafico
TMemGraficoAno1.FieldDefs.Add('IMPORTETOTAL',ftFloat);
TMemGraficoAno1.FieldDefs.Items[TMemGraficoAno1.FieldDefs.IndexOf('IMPORTETOTAL')].CreateField(Self);
TMemGraficoAno2.FieldDefs.Add('IMPORTETOTAL',ftFloat);
TMemGraficoAno2.FieldDefs.Items[TMemGraficoAno2.FieldDefs.IndexOf('IMPORTETOTAL')].CreateField(Self);
end;
function TfrInformeEstFacturasCliPro.InicializarFiltros: Boolean;
begin
inherited InicializarFiltros;
//TIPO INFORME FACTURASCLIENTE/FACTURASPROVEEDOR
Case Entidad of
entInfEstFacPro: AnosMem := dmTablaFacturasProveedor.DarListaAnos(EmpresaActiva.Codigo, False);
entVacia, entInfEstFacCli: AnosMem := dmTablaFacturasCliente.DarListaAnos(EmpresaActiva.Codigo, False);
end;
end;
procedure TfrInformeEstFacturasCliPro.InicializarGridResumen1(
var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
gridResumen.ShowHeader := False;
with Grid do begin
DestroyColumns;
{Columna CTE_CAMPO1}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := CTE_CAMPO1;
Columna.Caption := 'NFila';
Columna.Width := tamColCodigo2;
Columna.Visible := False;
{Columna CODIGO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGO';
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 := 'NUMFAC';
Columna.Caption := 'N<>m. facturas';
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 TfrInformeEstFacturasCliPro.InicializarGridResumen2(
var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
gridResumen2.ShowHeader := False;
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 IMPORTEDTO}
Columna := CreateColumn(TdxDBGridCurrencyColumn);
Columna.FieldName := 'IMPORTEDTO';
Columna.Caption := 'IMPORTEDTO';
Columna.Width := tamColPrecio;
(Columna as TdxDBGridCurrencyColumn).DisplayFormat := DISPLAY_EUROS2;
{Columna IMPORTETOTAL}
Columna := CreateColumn(TdxDBGridCurrencyColumn);
Columna.FieldName := 'IMPORTETOTAL';
Columna.Caption := 'IMPORTETOTAL';
Columna.Width := tamColPrecio;
(Columna as TdxDBGridCurrencyColumn).DisplayFormat := DISPLAY_EUROS2;
{Columna IMPORTECOBRADO}
Columna := CreateColumn(TdxDBGridCurrencyColumn);
Columna.FieldName := 'IMPORTECOBRADO';
Columna.Caption := 'IMPORTECOBRADO';
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;
function TfrInformeEstFacturasCliPro.InicializarGrids: Boolean;
var
Columna : TdxDBTreeListColumn;
begin
inherited InicializarGrids;
//ANO1
{Columna NUMPRE}
Columna := gridAnoCom1.CreateColumn(TdxDBGridCurrencyColumn);
Columna.FieldName := 'IMPORTETOTAL';
Columna.Caption := 'IMPORTETOTAL';
Columna.Width := tamColPrecio;
(Columna as TdxDBGridCurrencyColumn).DisplayFormat := DISPLAY_EUROS2;
//ANO2
Columna := gridAnoCom2.CreateColumn(TdxDBGridCurrencyColumn);
Columna.FieldName := 'IMPORTETOTAL';
Columna.Caption := 'IMPORTETOTAL';
Columna.Width := tamColPrecio;
(Columna as TdxDBGridCurrencyColumn).DisplayFormat := DISPLAY_EUROS2;
//COMPARATIVA
Columna := gridComparativa.CreateColumn(TdxDBGridCurrencyColumn);
Columna.FieldName := 'PORCENTAJE';
Columna.Caption := 'PORCENTAJE';
Columna.Width := tamColPrecio;
(Columna as TdxDBGridCurrencyColumn).DisplayFormat := DISPLAY_PORCENTAJE;
gridIntervalo.ShowHeader := False;
gridAnoCom1.ShowHeader := False;
gridAnoCom2.ShowHeader := False;
gridComparativa.ShowHeader := False;
end;
function TfrInformeEstFacturasCliPro.InicializarResumen1: Boolean;
begin
Result := False;
try
sqlResumen1 := TStringList.Create;
with sqlResumen1 do
begin
//TIPO INFORME FACTURASCLIENTE/FACTURASPROVEEDOR
Case Entidad of
entInfEstFacPro: begin
Add('select EXTRACT(YEAR FROM P.FECHAALTA) as ANO, P.CODIGOPROVEEDOR as CODIGO, COALESCE(C.NOMBRE, P.NOMBRE) as NOMBRE, ');
Add('COUNT(P.CODIGO) as NUMFAC, SUM(P.IMPORTETOTAL) as IMPORTETOTAL, SUM(P.IMPORTETOTAL) as PORCENTAJE ');
Add('from FACTURASPROVEEDOR P left join PROVEEDORES C ');
Add('on P.CODIGOPROVEEDOR = C.CODIGO ');
Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
Add('and EXTRACT(YEAR FROM FECHAALTA) = :ANO ');
Add('group by 1,2,3 ');
Add('order by 1,5 desc ');
end;
entVacia, entInfEstFacCli: begin
Add('select EXTRACT(YEAR FROM P.FECHAALTA) as ANO, P.CODIGOCLIENTE as CODIGO, COALESCE(C.NOMBRE, P.NOMBRE) as NOMBRE, ');
Add('COUNT(P.CODIGO) as NUMFAC, SUM(P.IMPORTETOTAL) as IMPORTETOTAL, SUM(P.IMPORTETOTAL) as PORCENTAJE ');
Add('from FACTURASCLIENTE P left join CLIENTES C ');
Add('on P.CODIGOCLIENTE = C.CODIGO ');
Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
Add('and EXTRACT(YEAR FROM FECHAALTA) = :ANO ');
Add('group by 1,2,3 ');
Add('order by 1,5 desc ');
end;
end;
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 TfrInformeEstFacturasCliPro.InicializarResumen2: Boolean;
begin
Result := False;
try
sqlResumen2 := TStringList.Create;
with sqlResumen2 do
begin
//TIPO INFORME FACTURASCLIENTE/FACTURASPROVEEDOR
Case Entidad of
entInfEstFacPro: begin
Add('select EXTRACT(YEAR FROM P.FECHAALTA) as ANO, P.CODIGOPROVEEDOR as CODIGO, COALESCE(C.NOMBRE, P.NOMBRE) as NOMBRE,');
Add('SUM(P.IMPORTEDESCUENTO) as IMPORTEDTO, SUM(P.IMPORTETOTAL) as IMPORTETOTAL');
Add(',(SUM(P.IMPORTETOTAL) - SUM(P.IMPORTEDESCUENTO)) as IMPORTECOBRADO');
Add(', case when SUM(P.IMPORTETOTAL) = 0 then 0');
Add(' else ((SUM(P.IMPORTEDESCUENTO) * 100) / SUM(P.IMPORTETOTAL)) end');
Add(' as PORCENTAJE');
Add('from FACTURASPROVEEDOR P left join PROVEEDORES C');
Add('on P.CODIGOPROVEEDOR = C.CODIGO');
Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
Add('and EXTRACT(YEAR FROM FECHAALTA) = :ANO');
Add('group by 1,2,3');
Add('order by 1,4 desc,5 desc');
end;
entVacia, entInfEstFacCli: begin
Add('select EXTRACT(YEAR FROM P.FECHAALTA) as ANO, P.CODIGOCLIENTE as CODIGO, COALESCE(C.NOMBRE, P.NOMBRE) as NOMBRE,');
Add('SUM(P.IMPORTEDESCUENTO) as IMPORTEDTO, SUM(P.IMPORTETOTAL) as IMPORTETOTAL');
Add(',(SUM(P.IMPORTETOTAL) - SUM(P.IMPORTEDESCUENTO)) as IMPORTECOBRADO');
Add(', case when SUM(P.IMPORTETOTAL) = 0 then 0');
Add(' else ((SUM(P.IMPORTEDESCUENTO) * 100) / SUM(P.IMPORTETOTAL)) end');
Add(' as PORCENTAJE');
Add('from FACTURASCLIENTE P left join CLIENTES C');
Add('on P.CODIGOCLIENTE = C.CODIGO');
Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
Add('and EXTRACT(YEAR FROM FECHAALTA) = :ANO');
Add('group by 1,2,3');
Add('order by 1,4 desc,5 desc');
end;
end;
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 TfrInformeEstFacturasCliPro.InicializarResumenes: Boolean;
begin
InicializarResumen1;
InicializarResumen2;
end;
procedure TfrInformeEstFacturasCliPro.limpiarTotales;
begin
pnlA1T1.Caption := '';
pnlA2T1.Caption := '';
pnlA3T1.Caption := '';
end;
function TfrInformeEstFacturasCliPro.RefrescarResumenes: Boolean;
begin
CalcularResumen1;
CalcularResumen2;
end;
procedure TfrInformeEstFacturasCliPro.bCancelarClick(Sender: TObject);
begin
CloseFrame;
end;
procedure TfrInformeEstFacturasCliPro.bImprimirClick(Sender: TObject);
var
lInforme: TdmInfEstReportFacturasCliPro;
DatosGenerales: TRxMemoryData;
begin
try
//Creamos informe
lInforme:= TdmInfEstReportFacturasCliPro.Create(Self);
lInforme.Entidad := Entidad;
//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.A2T1 := pnlA2T1.Caption;
lInforme.A3T1 := pnlA3T1.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);
//Imprimimos
// lInforme.Previsualizar;
lInforme.Imprimir;
finally
FreeAndNil(DatosGenerales);
DeleteFile(lInforme.Fichero);
FreeAndNil(lInforme);
end;
end;
function TfrInformeEstFacturasCliPro.GenerarTablaInforme: TRxMemoryData;
var
TablaAux: TRxMemoryData;
begin
//Creamos la tabla con los campos que vamos a tener
TablaAux:= TRxMemoryData.Create(Self);
with TablaAux do
begin
FieldDefs.Add('TITINTERVALO',ftString,20);
FieldDefs.Items[FieldDefs.IndexOf('TITINTERVALO')].CreateField(Self);
FieldDefs.Add('ANO1IMPORTETOTAL',ftString,50);
FieldDefs.Items[FieldDefs.IndexOf('ANO1IMPORTETOTAL')].CreateField(Self);
FieldDefs.Add('ANO2IMPORTETOTAL',ftString,50);
FieldDefs.Items[FieldDefs.IndexOf('ANO2IMPORTETOTAL')].CreateField(Self);
FieldDefs.Add('PORCENTAJE',ftString,50);
FieldDefs.Items[FieldDefs.IndexOf('PORCENTAJE')].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 ANO1IMPORTETOTAL
with TMemAnoCom1 do
begin
DisableControls;
First;
TablaAux.First;
while not Eof do
begin
TablaAux.Edit;
TablaAux.FieldByName('ANO1IMPORTETOTAL').AsString := FieldByName('IMPORTETOTAL').AsString;
TablaAux.Post;
TablaAux.Next;
Next;
end;
EnableControls;
end;
//Rellenamos los campos ANO2IMPORTETOTAL
with TMemAnoCom2 do
begin
DisableControls;
First;
TablaAux.First;
while not Eof do
begin
TablaAux.Edit;
TablaAux.FieldByName('ANO2IMPORTETOTAL').AsString := FieldByName('IMPORTETOTAL').AsString;
TablaAux.Post;
TablaAux.Next;
Next;
end;
EnableControls;
end;
//Rellenamos los campos PORCENTAJE
with TMemComparativa do
begin
DisableControls;
First;
TablaAux.First;
while not Eof do
begin
TablaAux.Edit;
TablaAux.FieldByName('PORCENTAJE').AsString := FieldByName('PORCENTAJE').AsString;
TablaAux.Post;
TablaAux.Next;
Next;
end;
EnableControls;
end;
Result:= TablaAux;
end;
procedure TfrInformeEstFacturasCliPro.SetAno2(const Value: Variant);
begin
inherited;
if not VarIsNull(Ano2) then
etiComp.Caption := msgInfEstTit31 + IntToStr(Ano1) + msgInfEstTit32 + IntToStr(Ano2)
else
etiComp.Caption := '';
end;
constructor TfrInformeEstFacturasCliPro.Create(AOwner : TComponent; Const Entidad: TRdxEntidad);
begin
FEntidad := Entidad;
inherited Create(AOwner);
ConfigurarFrame(Self, Self.Entidad);
case Entidad of
entInfEstFacCli: begin
cGeneral.Caption := msgInfEstFacCliGeneral;
DBChart1.Title.Text.Text := 'Facturaci<63>n de clientes';
cResumen1.Caption := msgInfEstFacCliResumen1;
cResumen2.Caption := msgInfEstFacCliResumen2;
end;
entInfEstFacPro: begin
cGeneral.Caption := msgInfEstFacProGeneral;
DBChart1.Title.Text.Text := 'Facturaci<63>n de proveedores';
cResumen2.Caption := msgInfEstFacProResumen2;
cResumen1.Caption := msgInfEstFacProResumen1;
end;
end;
end;
end.