Listados de facturas de cliente -> Arreglos estéticos

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@890 0c75b7a4-871f-7646-8a2f-f78d34cc349f
This commit is contained in:
David Arranz 2009-01-27 18:25:51 +00:00
parent 04f1da12de
commit 5bfc178b04
14 changed files with 269 additions and 150 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,7 @@
object RptFacturasCliente: TRptFacturasCliente
OldCreateOrder = True
OnCreate = DataModuleCreate
OnDestroy = DataModuleDestroy
Height = 513
Width = 933
object schReport: TDASchema

View File

@ -91,6 +91,7 @@ type
tbl_InformeListadoFacturasResumen: TDAMemDataTable;
Bin2DataStreamer: TDABin2DataStreamer;
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private
FConnection: IDAConnection;
FIdEmpresa: Integer;
@ -99,7 +100,9 @@ type
FFechaVenInicio: Variant;
FFechaVenFin: Variant;
FListaIDClientes: TIntegerArray;
FListaNombresClientes : TStringList;
FImporteMinimo: Currency;
FDesglosado : Boolean;
//Genera cada una de las facturas a imprimir
procedure _GenerarFactura(const ID: Integer; const VerSello: Boolean = True);
@ -107,6 +110,8 @@ type
procedure PrepararTablaInforme(ATabla: TDAMemDataTable);
procedure PrepararTablaResumenInforme(ATabla: IDADataset);
function _GenerarInforme(const TipoInforme: String): Binary;
procedure IniciarParametrosInforme;
procedure RecuperarNombresClientes;
public
function GenerarFactura(const ListaID : TIntegerArray; const VerSello: Boolean = True): Binary;
function GenerarFacturaEnPDF(const ListaID : TIntegerArray; const VerSello: Boolean = True): Binary;
@ -120,7 +125,8 @@ implementation
{$R *.dfm}
uses
uSistemaFunc, StrUtils, uDataModuleServer, schFacturasClienteClient_Intf;
uSistemaFunc, StrUtils, uDataModuleServer, schFacturasClienteClient_Intf,
uROServer, DataAbstract4_Intf;
const
rptFacturaCliente = 'InfFacturaCliente.fr3';
@ -144,11 +150,18 @@ begin
FConnection := dmServer.DarNuevaConexion;
frxReport.EngineOptions.NewSilentMode := simReThrow;
FListaNombresClientes := TStringList.Create;
frxDBCabecera.DataSource := DADSCabecera;
frxDBDetalles.DataSource := DADSDetalles;
frxDBVencimientos.DataSource := DADSVencimientos;
end;
procedure TRptFacturasCliente.DataModuleDestroy(Sender: TObject);
begin
FreeANDNIL(FListaNombresClientes);
end;
function TRptFacturasCliente.GenerarFactura(const ListaID: TIntegerArray; const VerSello: Boolean = True): Binary;
var
i: Integer;
@ -279,7 +292,8 @@ begin
Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE);
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE
if Desglosado then
FDesglosado := Desglosado;
if FDesglosado then
ATipoInforme := rptInformeListadoFacturasClienteDesglosado
else
ATipoInforme := rptInformeListadoFacturasCliente;
@ -342,7 +356,8 @@ begin
end;
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE
if Desglosado then
FDesglosado := Desglosado;
if FDesglosado then
ATipoInforme := rptInformeListadoFactuasClientePendienteDesglosado
else
ATipoInforme := rptInformeListadoFactuasClientePendiente;
@ -359,6 +374,56 @@ begin
end;
end;
procedure TRptFacturasCliente.IniciarParametrosInforme;
var
ATextos : TStringList;
ACadena : String;
begin
ATextos := TStringList.Create;
try
if (not VarIsNull(FFechaInicio)) and (not VarIsNull(FFechaFin)) then
ACadena := Format('Fechas de factura desde el %s hasta el %s', [VarToStr(FFechaInicio), VarToStr(FFechaFin)])
else
ACadena := 'Sin rango de fechas';
ATextos.Add(ACadena);
ACadena := '';
// Filtrar el informe por fechas de vencimiento
if (not VarIsNull(FFechaVenInicio)) and (not VarIsNull(FFechaVenFin)) then
begin
ACadena := Format('Vencimientos desde el %s hasta el %s', [VarToStr(FFechaVenInicio), VarToStr(FFechaVenFin)]);
ATextos.Add(ACadena);
ACadena := '';
end;
if (FImporteMinimo > 0) then
begin
ACadena := Format('Facturas con importe superior a %m', [FImporteMinimo]);
ATextos.Add(ACadena);
ACadena := '';
end;
if Assigned(FListaIDClientes) and (FListaIDClientes.Count > 0) then
begin
RecuperarNombresClientes;
ACadena := FListaNombresClientes.Text;
end
else begin
ACadena := 'Todos los clientes';
if FDesglosado then
ACadena := ACadena + ' (desglosados)'
end;
ATextos.Add(ACadena);
ACadena := '';
frxReport.Variables.Variables['TextoParametros'] := ATextos.Text;
finally
FreeAndNil(ATextos);
end;
end;
procedure TRptFacturasCliente.PrepararTablaInforme(ATabla: TDAMemDataTable);
var
Condicion: TDAWhereExpression;
@ -490,6 +555,96 @@ begin
ATabla.Where.AddText(AWhereStr);
end;
procedure TRptFacturasCliente.RecuperarNombresClientes;
var
AContactosService : IsrvContactos;
Intf : IInterface;
AClientID : TGUID;
ATableNameArray: StringArray;
ATableRequestInfoArray: TableRequestInfoArray;
ATableRequestInfo: TableRequestInfoV5;
AStream: TMemoryStream;
ADataTable: TDAMemDataTable;
i: Integer;
AWhereBuilder : TDAWhereBuilder;
ACondicion : TDAWhereExpression;
begin
CreateGUID(AClientID);
GetClassFactory('srvContactos').CreateInstance(AClientID, Intf);
if Assigned(Intf) then
begin
AContactosService := Intf as IsrvContactos;
ATableNameArray := StringArray.Create;
ATableRequestInfoArray := TableRequestInfoArray.Create;
AWhereBuilder := TDAWhereBuilder.Create;
try
ATableNameArray.Add('Clientes');
ATableRequestInfo := TableRequestInfoV5.Create;
with ATableRequestInfo do
begin
IncludeSchema := True;
MaxRecords := -1;
UserFilter := '';
AWhereBuilder.Clear;
with AWhereBuilder do
for i := 0 to FListaIDClientes.Count - 1 do
begin
ACondicion := NewBinaryExpression(
NewBinaryExpression(NewField('', 'ID'), NewConstant(FListaIDClientes[i], datInteger), dboEqual),
NewBinaryExpression(NewField('', 'ID_EMPRESA'), NewConstant(FIdEmpresa, datInteger), dboEqual),
dboAnd);
if not AWhereBuilder.IsEmpty then
Expression := NewBinaryExpression(Expression, ACondicion, dboOr)
else
Expression := ACondicion;
end;
WhereClause := AWhereBuilder.ExpressionToXmlNode(AWhereBuilder.Expression);
end;
try
ATableRequestInfoArray.Add(ATableRequestInfo);
AStream := AContactosService.GetData(ATableNameArray, ATableRequestInfoArray);
if Assigned(AStream) then
begin
ADataTable := TDAMemDataTable.Create(nil);
try
ADataTable.Name := 'Clientes';
ADataTable.LocalDataStreamer := Bin2DataStreamer;
ADataTable.RemoteFetchEnabled := False;
Bin2DataStreamer.ReadDataset(AStream, ADataTable, True);
ADataTable.Open;
FListaNombresClientes.Clear;
for i := 0 to ADataTable.RecordCount - 1 do
begin
FListaNombresClientes.Add(ADataTable.FieldByName('NOMBRE').AsString);
ADataTable.Next;
end;
finally
FreeANDNil(ADataTable);
end;
end;
except
on e: Exception do
dmServer.EscribirLog(e.Message);
end;
finally
FreeANDNIL(ATableRequestInfoArray);
FreeANDNIL(ATableNameArray);
FreeANDNIL(AWhereBuilder);
end;
end;
end;
procedure TRptFacturasCliente._GenerarFactura(const ID: Integer; const VerSello: Boolean = True);
var
AInforme: Variant;
@ -527,7 +682,6 @@ end;
function TRptFacturasCliente._GenerarInforme(const TipoInforme: String): Binary;
var
AInforme: Variant;
begin
Result := Binary.Create;
AInforme := DarRutaFichero(DarRutaInformes, TipoInforme, IntToStr(FIdEmpresa));
@ -535,8 +689,7 @@ begin
raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme));
frxReport.LoadFromFile(AInforme, True);
frxReport.Variables.Variables['FechaInicio'] := FFechaInicio;
frxReport.Variables.Variables['FechaFin'] := FFechaFin;
IniciarParametrosInforme;
frxReport.PrepareReport(False);
frxReport.PreviewPages.SaveToStream(Result);