Tecsitel_FactuGES2/Source/Modulos/Presupuestos de cliente/Reports/uRptPedidosCliente_Server.pas

119 lines
3.3 KiB
ObjectPascal

unit uRptPedidosCliente_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, uDAMemDataTable, uDADataStreamer, uDABin2DataStreamer;
type
TRptPresupuestosCliente = class(TDataModule)
DADataCabecera: TDADataSource;
DADataDetalles: TDADataSource;
frxRichObject1: TfrxRichObject;
frxBarCodeObject1: TfrxBarCodeObject;
frxOLEObject1: TfrxOLEObject;
frxCrossObject1: TfrxCrossObject;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxGradientObject1: TfrxGradientObject;
frxChartObject1: TfrxChartObject;
frxDBCabecera: TfrxDBDataset;
frxDBDetalles: TfrxDBDataset;
schReport: TDASchema;
DataDictionary: TDADataDictionary;
frxReport: TfrxReport;
Bin2DataStreamer: TDABin2DataStreamer;
tbl_Cabecera: TDAMemDataTable;
tbl_Detalles: TDAMemDataTable;
procedure DataModuleCreate(Sender: TObject);
private
FConnection: IDAConnection;
procedure GenerarPedido(const AID : Integer); overload;
public
function GenerarPedido(const AID : String): Binary; overload;
end;
implementation
{$R *.dfm}
uses
uDataModuleServer, schPedidosClienteClient_Intf;
const
rptInforme = 'InfPedidoCliente.fr3';
{ Dataset names for schReport }
ds_InformeCabecera = 'Informe_Cabecera';
ds_InformeDetalles = 'Informe_Detalles';
{ TRptPedidosProveedor }
procedure TRptPresupuestosCliente.DataModuleCreate(Sender: TObject);
begin
schReport.ConnectionManager := dmServer.ConnectionManager;
FConnection := dmServer.DarNuevaConexion;
frxReport.EngineOptions.NewSilentMode := simReThrow;
end;
function TRptPresupuestosCliente.GenerarPedido(const AID: String): Binary;
var
ID_Pedidos: TStringList;
i: Integer;
begin
Result := Binary.Create;
FConnection.BeginTransaction;
try
ID_Pedidos := TStringList.Create;
ID_Pedidos.CommaText := AID;
//Vamos generando todos y cada uno de los albaranes recibidos
for i := 0 to ID_Pedidos.Count - 1 do
GenerarPedido(StrToInt(ID_Pedidos.Strings[i]));
frxReport.PreviewPages.SaveToStream(Result);
finally
FConnection.RollbackTransaction;
end;
end;
procedure TRptPresupuestosCliente.GenerarPedido(const AID: Integer);
var
AStream: TMemoryStream;
dsMaster: IDADataset;
dsDetail: IDADataset;
begin
AStream := TMemoryStream.Create;
try
dsMaster := schReport.NewDataset(FConnection, ds_InformeCabecera, ['ID'], [AID]);
dsDetail := schReport.NewDataset(FConnection, ds_InformeDetalles, ['ID_PEDIDO'], [AID], False);
AStream.Clear;
DABINAdapter.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1);
DABINAdapter.ReadDataset(AStream, tbl_Cabecera, TRUE, '', TRUE, TRUE);
AStream.Clear;
DABINAdapter.WriteDataset(AStream, dsDetail, [woRows, woSchema], -1);
DABINAdapter.ReadDataset(AStream, tbl_Detalles, TRUE, '', TRUE, TRUE);
frxReport.LoadFromFile(DarRutaInformes + rptInforme, True);
frxReport.PrepareReport(False);
finally
AStream.Free;
dsMaster := Nil;
dsDetail := Nil;
end;
end;
end.