This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
Noviseda_FactuGES2/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas
roberto f2c4e7954f #408: Informe de comisiones de vendedor ordenar por referencia de factura
#409: Sacar en pedidos de cliente y albaranes de cliente la provincia
#410: Sacar nombre comercial en etiquetas y albaranes y pedidos
#411: Cuando sea un abono que salga en grande en el informe
#412: Cuando una factura es más de dos hojas que no repita el pie de importes
#413: Poder filtrar por provincia en todos los documentos
Version 1.0.8

git-svn-id: https://192.168.0.254/svn/Proyectos.Noviseda_FactuGES2/trunk@134 f33bb606-9f5c-448d-9c99-757f00063c96
2010-07-12 15:44:32 +00:00

212 lines
6.9 KiB
ObjectPascal

unit uRptAlbaranesCliente_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, IBCustomDataSet, IBQuery, IBDatabase,
uDAMemDataTable, frxExportPDF, FactuGES_Intf, uDABin2DataStreamer, uROClient;
type
TRptAlbaranesCliente = class(TDataModule)
DADSCabecera: TDADataSource;
DADSDetalles: TDADataSource;
frxRichObject1: TfrxRichObject;
frxBarCodeObject1: TfrxBarCodeObject;
frxOLEObject1: TfrxOLEObject;
frxCrossObject1: TfrxCrossObject;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxGradientObject1: TfrxGradientObject;
frxChartObject1: TfrxChartObject;
frxDBCabecera: TfrxDBDataset;
frxDBDetalles: TfrxDBDataset;
frxReport: TfrxReport;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
DataSource1: TDataSource;
DataSource3: TDataSource;
detalles: TIBQuery;
cabecera: TIBQuery;
cabeceraID: TIntegerField;
cabeceraID_EMPRESA: TIntegerField;
cabeceraID_CLIENTE: TIntegerField;
cabeceraFECHA_ALBARAN: TDateField;
cabeceraREFERENCIA: TIBStringField;
cabeceraREFERENCIA_CLIENTE: TIBStringField;
cabeceraID_PEDIDO: TIntegerField;
cabeceraREF_PEDIDO: TIBStringField;
cabeceraOBSERVACIONES: TMemoField;
cabeceraIMPORTE_TOTAL: TIBBCDField;
cabeceraNIF_CIF: TIBStringField;
cabeceraNOMBRE: TIBStringField;
cabeceraPERSONA_CONTACTO: TIBStringField;
cabeceraCALLE: TIBStringField;
cabeceraPOBLACION: TIBStringField;
cabeceraPROVINCIA: TIBStringField;
cabeceraCODIGO_POSTAL: TIBStringField;
detallesID: TIntegerField;
detallesID_ALBARAN: TIntegerField;
detallesPOSICION: TIntegerField;
detallesTIPO_DETALLE: TIBStringField;
detallesCONCEPTO: TIBStringField;
detallesCANTIDAD: TIntegerField;
detallesIMPORTE_UNIDAD: TIBBCDField;
detallesIMPORTE_TOTAL: TIBBCDField;
detallesREFERENCIA: TIBStringField;
tbl_Cabecera: TDAMemDataTable;
tbl_Detalles: TDAMemDataTable;
frxPDFExport1: TfrxPDFExport;
DABin2DataStreamer1: TDABin2DataStreamer;
frxDBEtiquetas: TfrxDBDataset;
DADSEtiquetas: TDADataSource;
tbl_Etiquetas: TDAMemDataTable;
schReport: TDASchema;
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private
FConnection: IDAConnection;
//Genera cada uno de los albaranes a imprimir
procedure _GenerarAlbaran(const AID: Integer);
public
function GenerarAlbaran(const AListaID : TIntegerArray): Binary;
function GenerarEtiquetas(const AListaID : TIntegerArray; const AMercancia: Variant; const ABultos: Integer): Binary;
function GenerarAlbaranEnPDF(const ListaID : TIntegerArray): Binary;
end;
implementation
{$R *.dfm}
uses
uSistemaFunc, uDataModuleServer, schAlbaranesClienteClient_Intf;
const
rptInforme = 'InfAlbaranCliente.fr3';
rptInfEtiquetas = 'InfEtiquetasAlbaranCliente.fr3';
{ Dataset names for schReport }
ds_InformeCabecera = 'Informe_Cabecera';
ds_InformeDetalles = 'Informe_Detalles';
ds_InformeDetallesEtiquetas = 'Informe_Detalles_Etiquetas';
{ TRptAlbaranesCliente }
procedure TRptAlbaranesCliente.DataModuleCreate(Sender: TObject);
begin
schReport.ConnectionManager := dmServer.ConnectionManager;
FConnection := dmServer.DarNuevaConexion;
frxReport.EngineOptions.NewSilentMode := simReThrow;
frxDBCabecera.DataSource := DADSCabecera;
frxDBCabecera.CloseDataSource := False;
frxDBDetalles.DataSource := DADSDetalles;
frxDBDetalles.CloseDataSource := False;
end;
procedure TRptAlbaranesCliente.DataModuleDestroy(Sender: TObject);
begin
tbl_Cabecera.Active := False;
tbl_Detalles.Active := False;
end;
function TRptAlbaranesCliente.GenerarAlbaran(const AListaID : TIntegerArray): Binary;
var
i: Integer;
begin
Result := Binary.Create;
try
//Vamos generando todos y cada uno de los albaranes recibidos
for i := 0 to AListaID.Count - 1 do
_GenerarAlbaran(AListaID.Items[i]);
frxReport.PreviewPages.SaveToStream(Result);
finally
end;
end;
function TRptAlbaranesCliente.GenerarAlbaranEnPDF(
const ListaID: TIntegerArray): Binary;
var
i: Integer;
begin
Result := Binary.Create;
try
//Vamos generando todos y cada uno de los presupuestos recibidos
for i := 0 to ListaID.Count - 1 do
_GenerarAlbaran(ListaID.Items[i]);
frxPDFExport1.Stream := Result;
frxReport.Export(frxPDFExport1)
finally
end;
end;
procedure TRptAlbaranesCliente._GenerarAlbaran(const AID: Integer);
var
AInforme: Variant;
begin
FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
tbl_Cabecera.Active := False;
tbl_Detalles.Active := False;
tbl_Cabecera.ParamByName('ID').AsInteger := AID;
tbl_Detalles.ParamByName('ID_ALBARAN').AsInteger := AID;
tbl_Cabecera.Active := True;
tbl_Detalles.Active := True;
AInforme := DarRutaFichero(DarRutaInformes, rptInforme); //, tbl_Cabecera.FieldByName('ID_EMPRESA').AsString); Albaranes comunes a todas las empresas
if VarIsNull(AInforme) then
raise Exception.Create (('Error Servidor: _GenerarFactura, no encuentra informe ' + rptInforme));
frxReport.LoadFromFile(AInforme, True);
frxReport.PrepareReport(False);
finally
FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
end;
end;
function TRptAlbaranesCliente.GenerarEtiquetas(const AListaID : TIntegerArray; const AMercancia: Variant; const ABultos: Integer): Binary;
var
i: Integer;
AInforme: Variant;
Cadena : String;
begin
Result := Binary.Create;
try
//Vamos generando todos y cada uno de los albaranes recibidos
for i := 0 to AListaID.Count - 1 do
begin
FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
tbl_Etiquetas.Active := False;
tbl_Etiquetas.ParamByName('ID').AsInteger := AListaID.Items[i];
tbl_Etiquetas.Active := True;
AInforme := DarRutaFichero(DarRutaInformes, rptInfEtiquetas);
if VarIsNull(AInforme) then
raise Exception.Create (('Error Servidor: GenerarEtiquetas, no encuentra informe ' + rptInfEtiquetas));
frxReport.LoadFromFile(AInforme, True);
frxReport.Variables.Variables['Mercancia'] := '''' + AMercancia + '''';
frxReport.Variables.Variables['Bultos'] := ABultos;
frxReport.PrepareReport(False);
finally
FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
end;
end;
frxReport.PreviewPages.SaveToStream(Result);
finally
end;
end;
end.