git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES/trunk@4 3f40d355-893c-4141-8e64-b1d9be72e7e7
258 lines
7.9 KiB
ObjectPascal
258 lines
7.9 KiB
ObjectPascal
{
|
|
===============================================================================
|
|
Copyright (©) 2002. Rodax Software.
|
|
===============================================================================
|
|
Los contenidos de este fichero son propiedad de Rodax Software titular del
|
|
copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
|
|
en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
|
|
acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
|
|
bajo el que se suministra.
|
|
-----------------------------------------------------------------------------
|
|
Web: www.rodax-software.com
|
|
===============================================================================
|
|
Fecha primera versión: 31-12-2003
|
|
Versión actual: 1.0.1
|
|
Fecha versión actual: 02-04-2004
|
|
===============================================================================
|
|
Modificaciones:
|
|
|
|
Fecha Comentarios
|
|
---------------------------------------------------------------------------
|
|
02-04-2004 Se ha eliminado el atributo SERIE (P8 MULTIEMPRESA)
|
|
===============================================================================
|
|
}
|
|
|
|
unit InformeTrimestralVentas;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, InformeBase, FR_IBXDB, FR_Shape, FR_DSet, FR_DBSet, FR_Class,
|
|
DB, IBCustomDataSet, IBQuery, RdxEmpresaActiva;
|
|
|
|
type
|
|
TdmInformeTrimestralVentas = class(TdmInformeBase)
|
|
TablaCab: TfrDBDataSet;
|
|
TablaDet: TfrDBDataSet;
|
|
TablaTrimestres: TIBQuery;
|
|
TablaFacturas: TIBQuery;
|
|
private
|
|
FCodigoTrimestre : Variant;
|
|
FListaIVA : TStringList;
|
|
FListaRE : TStringList;
|
|
function RellenarListaIVA : boolean;
|
|
function RellenarListaRE : boolean;
|
|
protected
|
|
procedure RellenarCabecera(Band: TfrBand); override;
|
|
procedure PrepararConsultas; override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
published
|
|
property CodigoTrimestre : variant read FCodigoTrimestre write FCodigoTrimestre;
|
|
end;
|
|
|
|
var
|
|
dmInformeTrimestralVentas: TdmInformeTrimestralVentas;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses
|
|
IBSQL, StrFunc, Mensajes, Constantes, BaseDatos, TablaEmpresas;
|
|
|
|
{ TdmInformeBase1 }
|
|
|
|
constructor TdmInformeTrimestralVentas.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
FNombreInforme := 'InformeTrimestralVentas.frf';
|
|
FListaIVA := TStringList.Create;
|
|
FListaRE := TStringList.Create;
|
|
end;
|
|
|
|
destructor TdmInformeTrimestralVentas.Destroy;
|
|
begin
|
|
FreeAndNil(FListaIVA);
|
|
FreeAndNil(FListaRE);
|
|
inherited;
|
|
end;
|
|
|
|
procedure TdmInformeTrimestralVentas.PrepararConsultas;
|
|
var
|
|
i : integer;
|
|
begin
|
|
inherited;
|
|
|
|
if (not RellenarListaIVA) or (not RellenarListaRE) then
|
|
raise Exception.Create('No se puede realizar el informe');
|
|
|
|
with TablaTrimestres do
|
|
begin
|
|
Database := FBaseDatos;
|
|
Transaction := FTransaccion;
|
|
SQL.Clear;
|
|
SQL.Add('select EXTRACT (YEAR FROM FECHAINI) as ANO, NOMBRE, FECHAINI, FECHAFIN from TRIMESTRES ');
|
|
SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
|
|
SQL.Add('and CODIGO = :CODIGO');
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
ParamByName('CODIGO').AsString := FCodigoTrimestre;
|
|
Prepare;
|
|
end;
|
|
|
|
with TablaFacturas do
|
|
begin
|
|
Database := FBaseDatos;
|
|
Transaction := FTransaccion;
|
|
SQL.Clear;
|
|
SQL.Add('select EXTRACT (MONTH FROM FECHAFACTURA) as MES, EXTRACT (DAY FROM FECHAFACTURA) as DIA, FC.CODIGO, ');
|
|
SQL.Add('NIFCIF, NOMBRE, TIPOFACTURA, DESCRIPCION, (BASEIMPONIBLE-IMPORTEDESCUENTO) as BASEIMPONIBLE, ');
|
|
|
|
for i := 0 to 2 do
|
|
begin
|
|
if i < FListaIVA.Count then
|
|
SQL.Add('case IVA when ' + FListaIVA.Strings[i] + ' then IMPORTEIVA else null end as IVA' + IntToStr(i) + ', ')
|
|
else
|
|
SQL.Add('0 as IVA' + IntToStr(i) + ', ');
|
|
end;
|
|
|
|
for i := 0 to 2 do
|
|
begin
|
|
if i < FListaRE.Count then
|
|
SQL.Add('case RE when ' + FListaRE.Strings[i] + ' then IMPORTERE else null end as RE' + IntToStr(i) + ', ')
|
|
else
|
|
SQL.Add('0 as RE' + IntToStr(i) + ', ');
|
|
end;
|
|
|
|
//Para que el importe total de cada factura sea de 4 decimales y el total salga con exactitud
|
|
SQL.Add('BASEIMPONIBLE - coalesce(importedescuento,0) + coalesce(importere,0) + coalesce(importeiva,0) as IMPORTETOTAL ');
|
|
SQL.Add('from FACTURASCLIENTE FC, TIPOSFACTURAS TF ');
|
|
SQL.Add('where TIPOFACTURA = TF.CODIGO ');
|
|
SQL.Add('and CODIGOEMPRESA = :CODIGOEMPRESA');
|
|
SQL.Add('and CODIGOTRIMESTRE = :CODIGO ');
|
|
SQL.Add('order by FECHAFACTURA, FC.CODIGO');
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
ParamByName('CODIGO').AsString := FCodigoTrimestre;
|
|
Prepare;
|
|
end;
|
|
end;
|
|
|
|
procedure TdmInformeTrimestralVentas.RellenarCabecera(Band: TfrBand);
|
|
var
|
|
iCont : Integer;
|
|
i : integer;
|
|
Objeto : TfrView;
|
|
begin
|
|
inherited;
|
|
with Band do
|
|
begin
|
|
for iCont := 0 to Objects.Count - 1 do
|
|
begin
|
|
Objeto := Objects[iCont];
|
|
|
|
if ((Objeto is TfrMemoView) and (Objeto.Name = 'Empresa')) then
|
|
begin
|
|
(Objeto as TfrMemoView).Memo.Clear;
|
|
(Objeto as TfrMemoView).Memo.Add('Empresa: ' + EmpresaActiva.NombreComercial);
|
|
end;
|
|
|
|
if ((Objeto is TfrMemoView) and (Pos('eIVA', Objeto.Name) > 0)) then
|
|
begin
|
|
(Objeto as TfrMemoView).Memo.Clear;
|
|
i := Pos('eIVA', Objeto.Name) + 4;
|
|
i := StrToInt(System.Copy(Objeto.Name, i, 1));
|
|
if (FListaIVA.Count-1) >= i then
|
|
(Objeto as TfrMemoView).Memo.Add(FListaIVA.Strings[i] + '%');
|
|
end;
|
|
|
|
if ((Objeto is TfrMemoView) and (Pos('eRE', Objeto.Name) > 0)) then
|
|
begin
|
|
(Objeto as TfrMemoView).Memo.Clear;
|
|
i := Pos('eRE', Objeto.Name) + 3;
|
|
i := StrToInt(System.Copy(Objeto.Name, i, 1));
|
|
if (FListaRE.Count-1) >= i then
|
|
(Objeto as TfrMemoView).Memo.Add(FListaRE.Strings[i] + '%');
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TdmInformeTrimestralVentas.RellenarListaIVA : boolean;
|
|
var
|
|
oSQL : TIBSQL;
|
|
begin
|
|
Result := False;
|
|
|
|
oSQL := TIBSQL.Create(Self);
|
|
with oSQL do
|
|
begin
|
|
Database := dmBaseDatos.BD;
|
|
Transaction := dmBaseDatos.Transaccion;
|
|
SQL.Add('select distinct IVA');
|
|
SQL.Add('from FACTURASCLIENTE FC');
|
|
SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
|
|
SQL.Add('and CODIGOTRIMESTRE = :CODIGO');
|
|
SQL.Add('order by IVA desc');
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
ParamByName('CODIGO').AsString := FCodigoTrimestre;
|
|
|
|
try
|
|
Prepare;
|
|
ExecQuery;
|
|
FListaIVA.Clear;
|
|
while not EOF do begin
|
|
if not VarIsNull(Fields[0].AsVariant) then
|
|
FListaIVA.Append(StringReplace(Fields[0].AsString, ',', '.', []));
|
|
Next;
|
|
end;
|
|
result := True;
|
|
finally
|
|
Close;
|
|
Transaction := NIL;
|
|
Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TdmInformeTrimestralVentas.RellenarListaRE : boolean;
|
|
var
|
|
oSQL : TIBSQL;
|
|
begin
|
|
Result := False;
|
|
|
|
oSQL := TIBSQL.Create(Self);
|
|
with oSQL do
|
|
begin
|
|
Database := dmBaseDatos.BD;
|
|
Transaction := dmBaseDatos.Transaccion;
|
|
SQL.Add('select distinct RE');
|
|
SQL.Add('from FACTURASCLIENTE FC');
|
|
SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA');
|
|
SQL.Add('and CODIGOTRIMESTRE = :CODIGO');
|
|
SQL.Add('order by RE desc');
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
ParamByName('CODIGO').AsString := FCodigoTrimestre;
|
|
|
|
try
|
|
Prepare;
|
|
ExecQuery;
|
|
FListaRE.Clear;
|
|
while not EOF do begin
|
|
if not VarIsNull(Fields[0].AsVariant) then
|
|
FListaRE.Append(StringReplace(Fields[0].AsString, ',', '.', []));
|
|
Next;
|
|
end;
|
|
Result := True;
|
|
finally
|
|
Close;
|
|
Transaction := NIL;
|
|
Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
end.
|