Tecsitel_FactuGES2/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas

134 lines
4.1 KiB
ObjectPascal
Raw Normal View History

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.