Lista de facturas de proveedor pendientes -> Arreglos estéticos

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@882 0c75b7a4-871f-7646-8a2f-f78d34cc349f
This commit is contained in:
David Arranz 2009-01-23 19:19:31 +00:00
parent a8fd42f4df
commit 84eb766751
4 changed files with 235 additions and 64 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,7 @@
object RptFacturasProveedor: TRptFacturasProveedor
OldCreateOrder = True
OnCreate = DataModuleCreate
OnDestroy = DataModuleDestroy
Height = 513
Width = 933
object schReport: TDASchema
@ -933,7 +934,7 @@ object RptFacturasProveedor: TRptFacturasProveedor
RelationShips = <>
UpdateRules = <>
Version = 0
Left = 48
Left = 64
Top = 16
end
object DataDictionary: TDADataDictionary
@ -1127,7 +1128,7 @@ object RptFacturasProveedor: TRptFacturasProveedor
DataType = datInteger
DisplayLabel = 'Cantidad'
end>
Left = 46
Left = 62
Top = 142
end
object frxDBCabecera: TfrxDBDataset
@ -1710,52 +1711,58 @@ object RptFacturasProveedor: TRptFacturasProveedor
PrintOptions.Printer = 'Por defecto'
PrintOptions.PrintOnSheet = 0
ReportOptions.CreateDate = 37800.807714351900000000
ReportOptions.LastChange = 39835.653141990740000000
ReportOptions.LastChange = 39836.719287280100000000
ScriptLanguage = 'PascalScript'
ScriptText.Strings = (
'procedure frxReportOnStartReport(Sender: TfrxComponent);'
'begin'
' Set('#39'Pagina'#39', 0);'
' Set('#39'TotalPaginas'#39', 0); '
'end;'
''
'procedure Band1OnBeforePrint(Sender: TfrxComponent);'
'begin'
' if not Engine.FinalPass then'
' Set('#39'TotalPaginas'#39', (<TotalPaginas> + 1));'
''
' if Engine.FinalPass then'
' Set('#39'Pagina'#39', (<Pagina> + 1)); '
'end;'
''
'procedure mContinuaOnBeforePrint(Sender: TfrxComponent);'
'begin'
' if Engine.FinalPass then'
' begin'
' //A la vez que salta este salta la asignacion de pagina por ' +
'lo que no coincide nunca si no suponemos +1 ' +
' ' +
' ' +
' ' +
' '
' if ((<Pagina> + 1) = <TotalPaginas>) then'
' if (<Page#> = <TotalPages#>) then'
' begin '
' mContinua.Visible := True;'
' mContinua.Visible := False;'
' end '
' else'
' begin '
' mContinua.Visible := False;'
' mContinua.Visible := True;'
' end '
' end; '
'end;'
''
'procedure CabParametrosOnBeforePrint(Sender: TfrxComponent);'
'begin'
' if <FechaInicio> = null then'
'procedure Memo11OnBeforePrint(Sender: TfrxComponent);'
'var'
' CabParametros.Visible := False; ' +
' '
' ACadena : String; ' +
' '
'begin'
' ACadena := <frxDBInformeListadoFacturasPendResumen."DATOS_BAN' +
'CARIOS">; '
' if Pos('#39'N'#186' de cuenta: '#39', ACadena) > 0 then'
' begin'
' Delete(ACadena, 1, 14);'
' Memo11.Lines.Text := '#39' '#39' + ACadena; ' +
' '
' end;'
'end;'
''
'procedure Memo10OnBeforePrint(Sender: TfrxComponent);'
'var'
' ACadena : String; ' +
' '
'begin'
' ACadena := <frxDBInformeListadoFacturasPendientes."DATOS_BANC' +
'ARIOS">; '
' if Pos('#39'N'#186' de cuenta: '#39', ACadena) > 0 then'
' begin'
' Delete(ACadena, 1, 14);'
' Memo10.Lines.Text := '#39' '#39' + ACadena; ' +
' '
' end;'
'end;'
''
'begin'
@ -1764,7 +1771,7 @@ object RptFacturasProveedor: TRptFacturasProveedor
ShowProgress = False
StoreInDFM = False
OnStartReport = 'frxReportOnStartReport'
Left = 145
Left = 153
Top = 16
end
object vencimientos: TIBQuery
@ -2053,7 +2060,11 @@ object RptFacturasProveedor: TRptFacturasProveedor
Top = 328
end
object Bin2DataStreamer: TDABin2DataStreamer
Left = 48
Left = 64
Top = 88
end
object DARemoteDataAdapter: TDARemoteDataAdapter
Left = 64
Top = 200
end
end

View File

@ -8,7 +8,8 @@ uses
uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient,
frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes,
uDAInterfaces, uDADataStreamer, IBCustomDataSet, IBQuery, IBDatabase,
uDAMemDataTable, FactuGES_Intf, frxExportPDF, uDABin2DataStreamer;
uDAMemDataTable, FactuGES_Intf, frxExportPDF, uDABin2DataStreamer,
uDARemoteDataAdapter;
type
TRptFacturasProveedor = class(TDataModule)
@ -90,7 +91,9 @@ type
tbl_InformeListadoFacturasPendResumen: TDAMemDataTable;
Bin2DataStreamer: TDABin2DataStreamer;
schReport: TDASchema;
DARemoteDataAdapter: TDARemoteDataAdapter;
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private
FConnection: IDAConnection;
FIdEmpresa: Integer;
@ -99,12 +102,14 @@ type
FFechaVenInicio: Variant;
FFechaVenFin: Variant;
FListaIDProveedores: TIntegerArray;
FListaNombresProveedores: TStringList;
FImporteMinimo: Currency;
FDesglosado : Boolean;
procedure RecuperarNombresProveedores;
procedure PrepararTablaInforme(ATabla: TDAMemDataTable);
procedure PrepararTablaResumenInforme(ATabla: IDADataset);
procedure IniciarParametrosInforme;
function _GenerarInforme(const TipoInforme: String): Binary;
public
function GenerarInformeIVA(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary;
function GenerarInformeListadoFacturas(const IdEmpresa: Integer; const FechaInicio: Variant; const FechaFin: Variant; const FechaVenInicio: Variant; const FechaVenFin: Variant; const ListaIDProveedores: TIntegerArray; const Desglosado: Boolean; const ImporteMinimo: Currency): Binary;
@ -116,7 +121,8 @@ implementation
{$R *.dfm}
uses
uSistemaFunc, StrUtils, uDataModuleServer, schFacturasProveedorClient_Intf;
uSistemaFunc, StrUtils, uDataModuleServer, schFacturasProveedorClient_Intf,
uROServer, DataAbstract4_Intf;
const
rptInformeIVA = 'InformeIVAProveedores.fr3';
@ -141,6 +147,13 @@ begin
frxDBCabecera.DataSource := DADSCabecera;
frxDBDetalles.DataSource := DADSDetalles;
FListaNombresProveedores := TStringList.Create;
end;
procedure TRptFacturasProveedor.DataModuleDestroy(Sender: TObject);
begin
FreeANDNIL(FListaNombresProveedores);
end;
function TRptFacturasProveedor.GenerarInformeIVA(const IdEmpresa: Integer;
@ -164,21 +177,26 @@ begin
FFechaVenInicio := Null;
FFechaVenFin := Null;
FImporteMinimo := ImporteMinimo;
FDesglosado := Desglosado;
if Assigned(FListaIDProveedores) then
FListaIDProveedores.Free;
FListaIDProveedores := ListaIDProveedores;
//Se van a prepara las tablas del informe
if tbl_InformeListadoFacturas.Active then
tbl_InformeListadoFacturas.Active := False;
PrepararTablaInforme(tbl_InformeListadoFacturas);
//Se prepara la tabla del listado resumen del informe
if tbl_InformeListadoFacturasResumen.Active then
tbl_InformeListadoFacturasResumen.Active := False;
dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasResumen, [], [], False);
PrepararTablaResumenInforme(dsMaster);
//Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster.Open;
AStream.Clear;
@ -186,7 +204,7 @@ begin
Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE);
//DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR
if Desglosado then
if FDesglosado then
ATipoInforme := rptInformeIVADesglosado
else
ATipoInforme := rptInformeIVA;
@ -226,6 +244,7 @@ begin
FFechaVenInicio := FechaVenInicio;
FFechaVenFin := FechaVenFin;
FImporteMinimo := ImporteMinimo;
FDesglosado := Desglosado;
if Assigned(FListaIDProveedores) then
FListaIDProveedores.Free;
@ -234,13 +253,16 @@ begin
//Se prepara la tabla del listado general del informe
if tbl_InformeListadoFacturas.Active then
tbl_InformeListadoFacturas.Active := False;
PrepararTablaInforme(tbl_InformeListadoFacturas);
//Se prepara la tabla del listado resumen del informe
if tbl_InformeListadoFacturasResumen.Active then
tbl_InformeListadoFacturasResumen.Active := False;
dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasResumen, [], [], False);
PrepararTablaResumenInforme(dsMaster);
//Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster.Open;
AStream.Clear;
@ -248,7 +270,7 @@ begin
Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE);
//DESGLOSADO POR PROVEEDOR EN ESTE INFORME NO SE DESGLOSARÁ POR PROVEEDOR
if Desglosado then
if FDesglosado then
ATipoInforme := rptInformeListadoFacturasProveedorDesglosado
else
ATipoInforme := rptInformeListadoFacturasProveedor;
@ -289,6 +311,7 @@ begin
FFechaVenInicio := FechaVenInicio;
FFechaVenFin := FechaVenFin;
FImporteMinimo := ImporteMinimo;
FDesglosado := Desglosado;
if Assigned(FListaIDProveedores) then
FListaIDProveedores.Free;
@ -298,6 +321,7 @@ begin
//Se prepara la tabla del listado general del informe
if tbl_InformeListadoFacturasPendientes.Active then
tbl_InformeListadoFacturasPendientes.Active := False;
PrepararTablaInforme(tbl_InformeListadoFacturasPendientes);
// Filtrar el informe por situacion
@ -317,8 +341,10 @@ begin
dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasPendientesResumen, [], [], False);
PrepararTablaResumenInforme(dsMaster);
// Filtrar el informe por situacion
dsMaster.Where.AddText(' AND (SITUACION <> ''PAGADA'')');
//Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster.Open;
AStream.Clear;
@ -326,7 +352,7 @@ begin
Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasPendResumen, TRUE, '', TRUE, TRUE);
//DESGLOSADO POR PROVEEDOR EN ESTE INFORME
if Desglosado then
if FDesglosado then
ATipoInforme := rptInformeListadoFactuasProveedorPendienteDesglosado
else
ATipoInforme := rptInformeListadoFactuasProveedorPendiente;
@ -344,6 +370,56 @@ begin
end;
end;
procedure TRptFacturasProveedor.IniciarParametrosInforme;
var
ATextos : TStringList;
ACadena : String;
begin
ATextos := TStringList.Create;
try
if (not VarIsNull(FFechaInicio)) and (not VarIsNull(FFechaFin)) then
ACadena := Format('Fechas de factura desde el %s hasta el %s', [VarToStr(FFechaInicio), VarToStr(FFechaFin)])
else
ACadena := 'Sin rango de fechas';
ATextos.Add(ACadena);
ACadena := '';
// Filtrar el informe por fechas de vencimiento
if (not VarIsNull(FFechaVenInicio)) and (not VarIsNull(FFechaVenFin)) then
begin
ACadena := Format('Vencimientos desde el %s hasta el %s', [VarToStr(FFechaVenInicio), VarToStr(FFechaVenFin)]);
ATextos.Add(ACadena);
ACadena := '';
end;
if (FImporteMinimo > 0) then
begin
ACadena := Format('Facturas con importe superior a %m', [FImporteMinimo]);
ATextos.Add(ACadena);
ACadena := '';
end;
if Assigned(FListaIDProveedores) and (FListaIDProveedores.Count > 0) then
begin
RecuperarNombresProveedores;
ACadena := FListaNombresProveedores.Text;
end
else begin
ACadena := 'Todos los proveedores';
if FDesglosado then
ACadena := ACadena + ' (desglosados)'
end;
ATextos.Add(ACadena);
ACadena := '';
frxReport.Variables.Variables['TextoParametros'] := ATextos.Text;
finally
FreeAndNil(ATextos);
end;
end;
procedure TRptFacturasProveedor.PrepararTablaInforme(ATabla: TDAMemDataTable);
var
Condicion: TDAWhereExpression;
@ -362,8 +438,8 @@ begin
end;
// Filtrar el informe por fechas
if not VarIsNull(FFechaInicio)
and not VarIsNull(FFechaFin) then
if not VarIsNull(FFechaInicio) and
not VarIsNull(FFechaFin) then
begin
with ATabla.DynamicWhere do
begin
@ -475,19 +551,109 @@ begin
ATabla.Where.AddText(AWhereStr);
end;
procedure TRptFacturasProveedor.RecuperarNombresProveedores;
var
AContactosService : IsrvContactos;
Intf : IInterface;
AClientID : TGUID;
ATableNameArray: StringArray;
ATableRequestInfoArray: TableRequestInfoArray;
ATableRequestInfo: TableRequestInfoV5;
AStream: TMemoryStream;
ADataTable: TDAMemDataTable;
i: Integer;
AWhereBuilder : TDAWhereBuilder;
ACondicion : TDAWhereExpression;
begin
CreateGUID(AClientID);
GetClassFactory('srvContactos').CreateInstance(AClientID, Intf);
if Assigned(Intf) then
begin
AContactosService := Intf as IsrvContactos;
ATableNameArray := StringArray.Create;
ATableRequestInfoArray := TableRequestInfoArray.Create;
AWhereBuilder := TDAWhereBuilder.Create;
try
ATableNameArray.Add('Proveedores');
ATableRequestInfo := TableRequestInfoV5.Create;
with ATableRequestInfo do
begin
IncludeSchema := True;
MaxRecords := -1;
UserFilter := '';
AWhereBuilder.Clear;
with AWhereBuilder do
for i := 0 to FListaIDProveedores.Count - 1 do
begin
ACondicion := NewBinaryExpression(
NewBinaryExpression(NewField('', 'ID'), NewConstant(FListaIDProveedores[i], datInteger), dboEqual),
NewBinaryExpression(NewField('', 'ID_EMPRESA'), NewConstant(FIdEmpresa, datInteger), dboEqual),
dboAnd);
if not AWhereBuilder.IsEmpty then
Expression := NewBinaryExpression(Expression, ACondicion, dboOr)
else
Expression := ACondicion;
end;
WhereClause := AWhereBuilder.ExpressionToXmlNode(AWhereBuilder.Expression);
end;
try
ATableRequestInfoArray.Add(ATableRequestInfo);
AStream := AContactosService.GetData(ATableNameArray, ATableRequestInfoArray);
if Assigned(AStream) then
begin
ADataTable := TDAMemDataTable.Create(nil);
try
ADataTable.Name := 'Proveedores';
ADataTable.LocalDataStreamer := Bin2DataStreamer;
ADataTable.RemoteFetchEnabled := False;
Bin2DataStreamer.ReadDataset(AStream, ADataTable, True);
ADataTable.Open;
FListaNombresProveedores.Clear;
for i := 0 to ADataTable.RecordCount - 1 do
begin
FListaNombresProveedores.Add(ADataTable.FieldByName('NOMBRE').AsString);
ADataTable.Next;
end;
finally
FreeANDNil(ADataTable);
end;
end;
except
on e: Exception do
dmServer.EscribirLog(e.Message);
end;
finally
FreeANDNIL(ATableRequestInfoArray);
FreeANDNIL(ATableNameArray);
FreeANDNIL(AWhereBuilder);
end;
end;
end;
function TRptFacturasProveedor._GenerarInforme(const TipoInforme: String): Binary;
var
AInforme: Variant;
begin
Result := Binary.Create;
AInforme := DarRutaFichero(DarRutaInformes, TipoInforme, IntTostr(FIdEmpresa));
if VarIsNull(AInforme) then
raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme));
frxReport.LoadFromFile(AInforme, True);
frxReport.Variables.Variables['FechaInicio'] := FFechaInicio;
frxReport.Variables.Variables['FechaFin'] := FFechaFin;
IniciarParametrosInforme;
frxReport.PrepareReport(False);
frxReport.PreviewPages.SaveToStream(Result);