unit uBizObraRelacionada; interface uses uDADataTable, uBizObra; const BIZ_OBRARELACIONADA = 'IBizObraRelacionada'; type IBizObraRelacionada = interface(IBizObra) ['{4C76F690-F6DF-4EEA-938B-160F5A80ACD6}'] end; TBizObraRelacionada = class(TBizObraDataTableRules, IBizObraRelacionada) end; function GetItem(CodigoObra : Integer) : IBizObraRelacionada; function GetItems: IBizObraRelacionada; function GetItemsSeleccionados(ASource : IBizObraRelacionada): IBizObraRelacionada; implementation uses SysUtils, uDBSelectionList, uDAInterfaces, uDataModuleObras; function GetItem(CodigoObra : Integer) : IBizObraRelacionada; begin Result := GetItems; with Result.DataTable do begin if Active then Active := False; Where.Clear; Where.AddText('OBRAS.CODIGO' + ' = ' + IntToStr(CodigoObra)); Active := True; end; end; function GetItems: IBizObraRelacionada; begin Result := (dmObras.GetDataTableItems(BIZ_OBRARELACIONADA) as IBizObraRelacionada); end; function GetItemsSeleccionados(ASource : IBizObraRelacionada): IBizObraRelacionada; var aObj : ISelectedRowList; dtObra : IBizObraRelacionada; i : integer; Cadena: Variant; begin if Supports(ASource, ISelectedRowList, aObj) then begin if (aObj.SelectedRows.Count = 1) then begin ASource.DataTable.GotoBookmark(aObj.SelectedRows[0]); Result := GetItem(ASource.CODIGO); Exit; end else dtObra := GetItems; end else raise Exception.Create('Interface no soportada (GetItemsSeleccionados)'); //Si esta abierta cerramos para poner el where if dtObra.DataTable.Active then dtObra.DataTable.Active := False; with dtObra.DataTable.Where do begin Cadena := ''; for i := 0 to aObj.SelectedRows.Count - 1 do begin ASource.DataTable.GotoBookmark(aObj.SelectedRows[i]); if Cadena <> '' then Cadena:= Cadena + ', '; Cadena:= Cadena + IntToStr(ASource.CODIGO); end; Clear; Cadena := '(' + Cadena + ')'; AddCondition('CODIGO', cIn, Cadena); end; Result := dtObra; end; initialization RegisterDataTableRules(BIZ_OBRARELACIONADA, TBizObraRelacionada); finalization end.