Tecsitel_FactuGES2/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_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

200 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;
try
ID_Presupuestos := TStringList.Create;
ID_Presupuestos.CommaText := AID;
//Vamos generando todos y cada uno de los albaranes recibidos
for i := 0 to ID_Presupuestos.Count - 1 do
GenerarPresupuesto(StrToInt(ID_Presupuestos.Strings[i]));
frxReport.PreviewPages.SaveToStream(Result);
finally
FConnection.RollbackTransaction;
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);
//frxReport.ShowPreparedReport;
finally
AStream.Free;
dsCabecera := Nil;
dsCapitulos := Nil;
end;
end;
end.