Tecsitel_FactuGES2/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.pas
2007-12-20 21:05:11 +00:00

198 lines
6.4 KiB
ObjectPascal

unit uRptPresupuestosCliente_Server;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, frxClass, frxDBSet, uDAScriptingProvider,
uDADataTable, uDACDSDataTable, DB, uDAClasses, uDABINAdapter, uROTypes,
uDAInterfaces, uDAMemDataTable, uDADataStreamer, uDABin2DataStreamer,
frxGradient, frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDAEngine,
IBSQL, IBDatabase, IBCustomDataSet, IBQuery;
type
TRptPresupuestosCliente = class(TDataModule)
DADSCabecera: TDADataSource;
DADSDetalles: TDADataSource;
frxBarCodeObject1: TfrxBarCodeObject;
frxOLEObject1: TfrxOLEObject;
frxCrossObject1: TfrxCrossObject;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxGradientObject1: TfrxGradientObject;
frxDBCabecera: TfrxDBDataset;
frxDBDetalles: TfrxDBDataset;
tbl_Cabecera: TDAMemDataTable;
tbl_Detalles: TDAMemDataTable;
frxReport: TfrxReport;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
DataSource1: TDataSource;
DataSource2: TDataSource;
capitulos: TIBQuery;
DataSource3: TDataSource;
detalles: TIBQuery;
DataSource4: TDataSource;
resumen: TIBQuery;
resumenID: TIntegerField;
resumenID_PRESUPUESTO: TIntegerField;
resumenPOSICION: TIntegerField;
resumenTIPO_DETALLE: TIBStringField;
resumenCONCEPTO: TIBStringField;
resumenIMPORTE_TOTAL: TIBBCDField;
resumenVISIBLE: TSmallintField;
frxDBCapitulos: TfrxDBDataset;
frxDBResumen: TfrxDBDataset;
DABin2DataStreamer1: TDABin2DataStreamer;
cabecera: TIBQuery;
cabeceraID: TIntegerField;
cabeceraID_EMPRESA: TIntegerField;
cabeceraFECHA_PRESUPUESTO: TDateField;
cabeceraREFERENCIA: TIBStringField;
cabeceraPORTADA: TMemoField;
cabeceraMEMORIA: TMemoField;
cabeceraOBSERVACIONES: TMemoField;
cabeceraIMPORTE_NETO: TIBBCDField;
cabeceraIMPORTE_PORTE: TIBBCDField;
cabeceraDESCUENTO: TFloatField;
cabeceraIMPORTE_DESCUENTO: TIBBCDField;
cabeceraBASE_IMPONIBLE: TIBBCDField;
cabeceraIVA: TFloatField;
cabeceraID_CLIENTE: TIntegerField;
cabeceraREFERENCIA_CLIENTE: TIBStringField;
cabeceraCLIENTE_FINAL: TIBStringField;
cabeceraNIF_CIF: TIBStringField;
cabeceraNOMBRE: TIBStringField;
cabeceraIMPORTE_IVA: TIBBCDField;
cabeceraIMPORTE_TOTAL: TIBBCDField;
cabeceraPERSONA_CONTACTO: TIBStringField;
cabeceraCALLE: TIBStringField;
cabeceraPOBLACION: TIBStringField;
cabeceraPROVINCIA: TIBStringField;
cabeceraCODIGO_POSTAL: TIBStringField;
DADSCapitulos: TDADataSource;
tbl_Capitulos: TDAMemDataTable;
DADSResumen: TDADataSource;
tbl_Resumen: TDAMemDataTable;
DAMemDataTable1: TDAMemDataTable;
DAMemDataTable2: TDAMemDataTable;
schReport: TDASchema;
DataDictionary: TDADataDictionary;
procedure DataModuleCreate(Sender: TObject);
private
FConnection: IDAConnection;
procedure GenerarPresupuesto(const AID : Integer); overload;
public
function GenerarPresupuesto(const AID : String): Binary; overload;
end;
implementation
{$R *.dfm}
uses
uDataModuleServer, schPresupuestosClienteClient_Intf;
const
rptInforme = 'InfPresupuestoCliente.fr3';
{ Dataset names for schReport }
ds_InformeCabecera = 'Informe_Cabecera';
ds_InformeCapitulos = 'Informe_Capitulos';
{ TRptPresupuestosProveedor }
procedure TRptPresupuestosCliente.DataModuleCreate(Sender: TObject);
begin
schReport.ConnectionManager := dmServer.ConnectionManager;
FConnection := dmServer.DarNuevaConexion;
frxReport.EngineOptions.NewSilentMode := simReThrow;
end;
function TRptPresupuestosCliente.GenerarPresupuesto(const AID: String): Binary;
var
ID_Presupuestos: TStringList;
i: Integer;
begin
Result := Binary.Create;
//FConnection.BeginTransaction; <--- Creo que no va a hacer falta.
try
ID_Presupuestos := TStringList.Create;
ID_Presupuestos.CommaText := AID;
//Vamos generando todos y cada uno de los presupuestos recibidos
for i := 0 to ID_Presupuestos.Count - 1 do
GenerarPresupuesto(StrToInt(ID_Presupuestos.Strings[i]));
frxReport.PreviewPages.SaveToStream(Result);
finally
//FConnection.RollbackTransaction; <--- Creo que no va a hacer falta.
end;
end;
procedure TRptPresupuestosCliente.GenerarPresupuesto(const AID: Integer);
var
AStream: TMemoryStream;
dsCabecera: IDADataset;
dsCapitulos: IDADataset;
I: Integer;
begin
AStream := TMemoryStream.Create;
try
{ dsCabecera := schReport.NewDataset(FConnection, ds_InformeCabecera, ['ID'], [AID]);
dsCapitulos := schReport.NewDataset(FConnection, ds_InformeCapitulos, ['ID_PRESUPUESTO'], [AID], False);
AStream.Clear;
DABin2DataStreamer1.WriteDataset(AStream, dsCabecera, [woRows, woSchema]);
DABin2DataStreamer1.ReadDataset(AStream, DAMemDataTable1, True, ds_InformeCabecera, True, True);
AStream.Clear;
DABin2DataStreamer1.WriteDataset(AStream, dsCapitulos, [woRows, woSchema]);
DABin2DataStreamer1.ReadDataset(AStream, DAMemDataTable2, True, ds_InformeCapitulos, True, True);
DADSCabecera.DataTable := DAMemDataTable1;
frxDBCabecera.DataSource := DADSCabecera;
DADSCapitulos.DataTable := DAMemDataTable2;
frxDBCapitulos.DataSource := DADSCapitulos;}
{ DAMemDataTable1.Active := True;
for I := 0 to DAMemDataTable1.RecordCount - 1 do
ShowMessage(DAMemDataTable1.Fields[2].AsString);}
{ AStream.Clear;
Bin2DataStreamer.WriteDataset(AStream, dsDetail, [woRows, woSchema], -1);
Bin2DataStreamer.ReadDataset(AStream, tbl_Detalles, TRUE, '', TRUE, TRUE);}
frxDBCabecera.DataSource := DADSCabecera;
frxDBCapitulos.DataSource := DADSCapitulos;
frxDBDetalles.DataSource := DADSDetalles;
frxDBResumen.DataSource := DADSResumen;
tbl_Cabecera.ParamByName('ID').AsInteger := AID;
tbl_Capitulos.ParamByName('ID_PRESUPUESTO').AsInteger := AID;
tbl_Detalles.ParamByName('ID_PRESUPUESTO').AsInteger := AID;
tbl_Resumen.ParamByName('ID_PRESUPUESTO').AsInteger := AID;
tbl_Cabecera.Active := True;
tbl_Capitulos.Active := True;
tbl_Detalles.Active := True;
tbl_Resumen.Active := True;
frxReport.LoadFromFile(DarRutaInformes + rptInforme, True);
frxReport.PrepareReport(False);
finally
AStream.Free;
dsCabecera := Nil;
dsCapitulos := Nil;
end;
end;
end.