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

109 lines
2.9 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;
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); overload;
public
function GenerarFicha(const AFichaID : String): Binary; overload;
end;
implementation
{$R *.dfm}
uses
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 AFichaID: String): Binary;
var
ID_Fichas: TStringList;
i: Integer;
begin
Result := Binary.Create;
FConnection.BeginTransaction;
try
ID_Fichas := TStringList.Create;
ID_Fichas.CommaText := AFichaID;
//Vamos generando todos y cada uno de las fichas de empleado
for i := 0 to ID_Fichas.Count - 1 do
GenerarFicha(StrToInt(ID_Fichas.Strings[i]));
frxReport.PreviewPages.SaveToStream(Result);
finally
FConnection.RollbackTransaction;
end;
end;
procedure TRptFichasEmpleado.GenerarFicha(const ID: integer);
var
AStream: TMemoryStream;
dsMaster: IDADataset;
begin
AStream := TMemoryStream.Create;
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);
frxReport.LoadFromFile(DarRutaInformes + rptFichaEmpleado, True);
frxReport.PrepareReport(False);
finally
AStream.Free;
dsMaster := Nil;
end;
end;
end.