unit InformeEstadoObra; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, InformeBaseFR3, frxCross, frxClass, frxIBXComponents, frxDBSet, DB, IBCustomDataSet, IBDatabase, TablaCitas, IBQuery; type TdmInformeEstadoObra = class(TdmInformeBaseFR3) frxTablaCitas: TfrxDBDataset; frxTablaInstaladores: TfrxDBDataset; frxTablaObras: TfrxDBDataset; dsCitas: TDataSource; dsInstaladores: TDataSource; dsObras: TDataSource; TablaCitas: TIBQuery; TablaObrasInstaladores: TIBQuery; TablaObras: TIBQuery; frxReport1: TfrxReport; procedure FReportBeforePrint(Sender: TfrxReportComponent); private FCodigoContrato: variant; protected procedure PrepararConsultas; override; public EstadoObra : array[TPartidasObra, tcPedido..tcEntregaCliente] of String; Proveedores : array[TPartidasObra] of String; constructor Create(AOwner : TComponent); override; destructor Destroy; override; property CodigoContrato : variant read FCodigoContrato write FCodigoContrato; end; var dmInformeEstadoObra: TdmInformeEstadoObra; implementation uses TablaObras, TablaObrasInstaladores, frxPreview; {$R *.dfm} { TdmInformeEstadoObra } constructor TdmInformeEstadoObra.Create(AOwner: TComponent); begin inherited; FCodigoContrato := NULL; FNombreInforme := 'InformeEstadoObra.fr3'; end; destructor TdmInformeEstadoObra.Destroy; begin inherited; end; procedure TdmInformeEstadoObra.PrepararConsultas; var Cont : TTipoCitas; begin inherited; with TablaObras do begin Database := FBaseDatos; Transaction := FTransaccion; SQL.Clear; SQL.Assign(dmTablaObras.sqlConsultar); ParamByName('CODIGOCONTRATO').AsString := FCodigoContrato; Prepare; Open; end; with TablaCitas do begin Database := FBaseDatos; Transaction := FTransaccion; SQL.Clear; SQL.Add('select START, CAPTION, NOMBRE, TIPOTAREA '); SQL.Add('from CITAS, INSTALADORES '); SQL.Add('WHERE CODIGOCONTRATO = :CODIGOCONTRATO'); SQL.Add('and CODIGO = RESOURCEID '); SQL.Add('and TIPOTAREA IN ('); for Cont := tcEntrega to tcRemate do begin SQL.Add('''' + TextoTipoCita[Ord(Cont)] + ''''); if Cont < tcRemate then SQL.Add(', '); end; SQL.Add(')'); ParamByName('CODIGOCONTRATO').AsString := FCodigoContrato; Prepare; Open; end; with TablaObrasInstaladores do begin Database := FBaseDatos; Transaction := FTransaccion; SQL.Clear; SQL.Assign(dmTablaObrasInstaladores.sqlGrid); ParamByName('CODIGOCONTRATO').AsString := FCodigoContrato; Prepare; Open; end; end; procedure TdmInformeEstadoObra.FReportBeforePrint( Sender: TfrxReportComponent); var Cross: TfrxCrossView; APartida : TPartidasObra; ATipoCita : TTipoCitas; Col, Row : Integer; Cadena : String; begin if Sender is TfrxCrossView then begin Cross := TfrxCrossView(Sender); for APartida := poCocina to poVarios do begin Col := Ord(APartida); Cross.AddValue(['Proveedores'], [LiteralPartidasObra[Col]], [Proveedores[APartida]]); for ATipoCita := tcPedido to tcEntregaCliente do begin Row := Ord(ATipoCita); Cadena := EstadoObra[APartida, ATipoCita]; Cross.AddValue([LiteralTipoCita[Row]], [LiteralPartidasObra[Col]], [EstadoObra[APartida, ATipoCita]]); end; end; end; end; end.