Tecsitel_FactuGES2/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas
david 40a67a5c80 Presupuestos de cliente:
- Informe de presupuesto (sin terminar).
 - Editor con RichEditor para portada y memoria del presupuesto.
 - Procedimientos almacenados en BD que organizan el presupuesto en capítulos y conceptos de capítulos.

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@159 0c75b7a4-871f-7646-8a2f-f78d34cc349f
2007-12-11 16:24:53 +00:00

134 lines
4.1 KiB
ObjectPascal

unit uRptFacturasCliente_Server;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, frxClass, frxDBSet, uDAScriptingProvider,
uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient,
frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes,
uDAInterfaces, uDADataStreamer, IBCustomDataSet, IBQuery, IBDatabase;
type
TRptFacturasCliente = class(TDataModule)
DADataCabecera: TDADataSource;
DADataDetalles: TDADataSource;
tbl_FacturaCliente: TDACDSDataTable;
tbl_DetallesFacturaCliente: TDACDSDataTable;
frxDBCabecera: TfrxDBDataset;
frxDBDetalles: TfrxDBDataset;
DADataVencimientos: TDADataSource;
tbl_Vencimientos: TDACDSDataTable;
frxDBDataset1: TfrxDBDataset;
schReport: TDASchema;
DataDictionary: TDADataDictionary;
frxReport: TfrxReport;
frxBarCodeObject1: TfrxBarCodeObject;
frxOLEObject1: TfrxOLEObject;
frxCrossObject1: TfrxCrossObject;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxGradientObject1: TfrxGradientObject;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
DataSource1: TDataSource;
DataSource2: TDataSource;
cabecera: TIBQuery;
detalles: TIBQuery;
procedure DataModuleCreate(Sender: TObject);
private
FConnection: IDAConnection;
//Genera cada una de las facturas a imprimir
procedure GenerarFactura(const ID: integer); overload;
public
function GenerarFactura(const AFacturaID : String): Binary; overload;
end;
implementation
{$R *.dfm}
uses
uDataModuleServer, schFacturasClienteClient_Intf;
const
rptFacturaCliente = 'InfFacturaCliente.fr3';
{ Dataset names for schReport }
ds_InformeFacturasCliente = 'InformeFacturasCliente';
ds_InformeFacturasCliente_Detalles = 'InformeFacturasCliente_Detalles';
ds_InformeFacturasCliente_Vencimientos = 'InformeFacturasCliente_Vencimientos';
{ TRptFacturasCliente }
procedure TRptFacturasCliente.DataModuleCreate(Sender: TObject);
begin
schReport.ConnectionManager := dmServer.ConnectionManager;
FConnection := dmServer.DarNuevaConexion;
frxReport.EngineOptions.NewSilentMode := simReThrow;
end;
function TRptFacturasCliente.GenerarFactura(const AFacturaID: String): Binary;
var
ID_Facturas: TStringList;
i: Integer;
begin
Result := Binary.Create;
FConnection.BeginTransaction;
try
ID_Facturas := TStringList.Create;
ID_Facturas.CommaText := AFacturaID;
//Vamos generando todos y cada una de las facturas recibidas
for i := 0 to ID_Facturas.Count - 1 do
GenerarFactura(StrToInt(ID_Facturas.Strings[i]));
frxReport.PreviewPages.SaveToStream(Result);
finally
FConnection.RollbackTransaction;
end;
end;
procedure TRptFacturasCliente.GenerarFactura(const ID: integer);
var
AStream: TMemoryStream;
dsMaster: IDADataset;
dsDetail: IDADataset;
dsVencimientos : IDADataset;
begin
AStream := TMemoryStream.Create;
try
dsMaster := schReport.NewDataset(FConnection, ds_InformeFacturasCliente, ['ID'], [ID]);
dsDetail := schReport.NewDataset(FConnection, ds_InformeFacturasCliente_Detalles, ['ID_FACTURA'], [ID], False);
dsVencimientos := schReport.NewDataset(FConnection, ds_InformeFacturasCliente_Vencimientos, ['ID_FACTURA'], [ID], False);
{ AStream.Clear;
DABINAdapter.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1);
DABINAdapter.ReadDataset(AStream, tbl_FacturaCliente, TRUE, '', TRUE, TRUE);
AStream.Clear;
DABINAdapter.WriteDataset(AStream, dsDetail, [woRows, woSchema], -1);
DABINAdapter.ReadDataset(AStream, tbl_DetallesFacturaCliente, TRUE, '', TRUE, TRUE);
AStream.Clear;
DABINAdapter.WriteDataset(AStream, dsVencimientos, [woRows, woSchema], -1);
DABINAdapter.ReadDataset(AStream, tbl_Vencimientos, TRUE, '', TRUE, TRUE);}
frxReport.LoadFromFile(DarRutaInformes + rptFacturaCliente, True);
frxReport.PrepareReport(False);
finally
AStream.Free;
dsMaster := Nil;
dsDetail := Nil;
end;
end;
end.