Tecsitel_FactuGES2/Source/Modulos/Contactos/Reports/uRptFichasEmpleado_Server.pas

107 lines
3.1 KiB
ObjectPascal

unit uRptFichasEmpleado_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, uDABin2DataStreamer, uDAMemDataTable,
FactuGES_Intf;
type
TRptFichasEmpleado = class(TDataModule)
DADataCabecera: TDADataSource;
tbl_FichaEmpleado: TDAMemDataTable;
frxRichObject1: TfrxRichObject;
frxBarCodeObject1: TfrxBarCodeObject;
frxOLEObject1: TfrxOLEObject;
frxCrossObject1: TfrxCrossObject;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxGradientObject1: TfrxGradientObject;
frxChartObject1: TfrxChartObject;
frxDBCabecera: TfrxDBDataset;
schReport: TDASchema;
DataDictionary: TDADataDictionary;
frxReport: TfrxReport;
Bin2DataStreamer: TDABin2DataStreamer;
procedure DataModuleCreate(Sender: TObject);
private
FConnection: IDAConnection;
//Genera cada uno de los albaranes a imprimir
procedure _GenerarFicha(const ID: Integer);
public
function GenerarFicha(const ListaID: TIntegerArray): Binary;
end;
implementation
{$R *.dfm}
uses
uSistemaFunc, uDataModuleServer, schContactosClient_Intf;
const
rptFichaEmpleado = 'InfFichaEmpleado.fr3';
{ Dataset names for schReport }
ds_InformeFichaEmpleado = 'InformeFichasEmpleado';
{ TRptFichaEmpleado }
procedure TRptFichasEmpleado.DataModuleCreate(Sender: TObject);
begin
schReport.ConnectionManager := dmServer.ConnectionManager;
FConnection := dmServer.DarNuevaConexion;
frxReport.EngineOptions.NewSilentMode := simReThrow;
end;
function TRptFichasEmpleado.GenerarFicha(const ListaID: TIntegerArray): Binary;
var
i: Integer;
begin
Result := Binary.Create;
try
//Vamos generando todos y cada uno de las fichas de empleado
for i := 0 to ListaID.Count - 1 do
_GenerarFicha(ListaID.Items[i]);
frxReport.PreviewPages.SaveToStream(Result);
finally
end;
end;
procedure TRptFichasEmpleado._GenerarFicha(const ID: Integer);
var
AStream: TMemoryStream;
dsMaster: IDADataset;
AInforme: Variant;
begin
AStream := TMemoryStream.Create;
FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
dsMaster := schReport.NewDataset(FConnection, ds_InformeFichaEmpleado, ['ID'], [ID]);
AStream.Clear;
Bin2DataStreamer.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1);
Bin2DataStreamer.ReadDataset(AStream, tbl_FichaEmpleado, TRUE, '', TRUE, TRUE);
AInforme := DarRutaFichero(DarRutaInformes, rptFichaEmpleado);
if VarIsNull(AInforme) then
raise Exception.Create (('Error Servidor: _GenerarFicha, no encuentra informe ' + rptFichaEmpleado));
frxReport.LoadFromFile(AInforme, True);
frxReport.PrepareReport(False);
finally
FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
AStream.Free;
dsMaster := Nil;
end;
end;
end.