From c1310ea5060dcd5a6910f3788f85c5b629332c78 Mon Sep 17 00:00:00 2001 From: roberto Date: Mon, 16 Jun 2008 17:17:42 +0000 Subject: [PATCH] Para que al elegir el cliente asociado a la obra se copie la direccion de este git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@458 0c75b7a4-871f-7646-8a2f-f78d34cc349f --- .../Obras/Controller/Obras_controller.dpk | Bin 762 -> 782 bytes .../Obras/Controller/Obras_controller.dproj | 11 +-- .../Obras/Controller/Obras_controller.res | Bin 384 -> 4748 bytes .../Obras/Controller/uObrasController.pas | 77 +++++++++++++++++- Source/Modulos/Obras/Obras_Group.groupproj | 16 +++- Source/Modulos/Obras/Views/Obras_view.dpk | Bin 1157 -> 1202 bytes Source/Modulos/Obras/Views/Obras_view.dproj | 16 ++-- Source/Modulos/Obras/Views/Obras_view.res | Bin 384 -> 4748 bytes Source/Modulos/Obras/Views/uEditorObra.pas | 2 + .../Obras/Views/uViewClienteAsociadoObra.pas | 2 +- Source/Modulos/Obras/Views/uViewObra.dfm | 48 ++++++----- Source/Modulos/Obras/Views/uViewObra.pas | 66 +++++++++++++-- .../Obras/Views/uViewSubcontrataObra.pas | 2 +- 13 files changed, 191 insertions(+), 49 deletions(-) diff --git a/Source/Modulos/Obras/Controller/Obras_controller.dpk b/Source/Modulos/Obras/Controller/Obras_controller.dpk index 901b704974cbe9451f61dc2a2db6a8272d675f98..768433615d77a829bc1578b354b2531c82f70520 100644 GIT binary patch delta 32 ncmeyx+Q+s*kx4{{mrFsxIX|x?F}WnaI6gN&B{gTVBGXL(p|c9B delta 11 ScmeBU`^CCJk!i9i(@g*vy95dV diff --git a/Source/Modulos/Obras/Controller/Obras_controller.dproj b/Source/Modulos/Obras/Controller/Obras_controller.dproj index 398943a7..9f80d81d 100644 --- a/Source/Modulos/Obras/Controller/Obras_controller.dproj +++ b/Source/Modulos/Obras/Controller/Obras_controller.dproj @@ -39,17 +39,18 @@ Delphi.Personality Package -FalseTrueFalseTrueFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Obras_controller.dpk +FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Obras_controller.dpk MainSource - - - - + + + + + diff --git a/Source/Modulos/Obras/Controller/Obras_controller.res b/Source/Modulos/Obras/Controller/Obras_controller.res index 8b251f312bcccec5485024f6fe8d80e1cdf25746..1641339fcc482e7e3492d1b45813a86619622c33 100644 GIT binary patch literal 4748 zcmbW5&ub)A5XUPdpe&2#;C*uNAUVhgd+&(4um@dnom`vXF9g}ZuHJ;se=<3UNdFJg zbCw+UD9j$byGIXV`~6hC>h4S?F|k9X-j90q{Z_qtZ<;nUJCO8!h?p${kR>3GhM`oH*q zk=UsjOCIgA_4!`B+Gb&`I84R)bT4dy-BQV<-SyFz?R8ILEQ(+JB$u{sEXE@j@B*7W zT;iZH#|OJ<&DO$RCkM6VbK3(B(k{nbdv1lpc;E$xz9as|v3uE1V{hw2w~g3eD0an7 z{BT%G%irdMe*|oDJmgvJaA2`9B<6Xi*?M~Q;)@Sbfwf3uf zVaWkbUjU=;sL{BlYemIZXv%qZ{SZw{-TCU+;!nH6KDDIJumU+9{E0zXW4>7T)y|>$DQlv zRJe?TjSp{c!DqeayAnSMTtZZT;>LN7J0Rls+5m@q)MbyB*eL%Eu@(+$Cw}Pd@q7N| z%Q0*AHpCP^b9v`@jx-l_FD>khpW2W8(OU2&V5TrnoAY-m_hlcV?zq3;7{2gF{J#Hc z6R+o~mVenX?>@W0@_DVzyOFs(5464CY{!q9ChoF#_*eXi@4gFuV8?vhl=_w5$iKL0 zEV0nMBcN08xtRmsgJrqjh@s#|{?*ssnsG)mH*wa6{efF0JFWHok@kA5%b661{B38= zCcgJ|*ZFTpV$8<-&+AWpa)Q8*`wL&hMeNQ^v6I7$HSdLZhZ^&+6<@Uw_Zsml9^v3W zVvPDBKHh;i=RU4J_ta3E;)Mn>Y+L zKLZ0UQ+*km9FO-b?U4gmn-62iwzH6&*duKGo~aUV)bYDla8wWZ9+^7p-F<8lP@i!m z@vhbD_${F}h>^T;C(?(b*OJDk?{dEXB?nuehoON3HAb!7Mr7-ls!84-5V-jJugbu<_$}mU=Yd9!?TOX;|B-#B)+0x#9q*yqJiqS!`49d=7ztk$O+9=1i;?K_|J<8T z?0b7=-`Z3A#vV$4XJ5(lQ~TOZHUFdA%oWvK5zg&_IKXIbughQBA8XAsd#=@|TFLXC zy(^m((;DnQmDQKatmw!@c`| G?EMQ&4NnpP delta 11 ScmeBCZD5|Duvteife`=|>;pCc diff --git a/Source/Modulos/Obras/Controller/uObrasController.pas b/Source/Modulos/Obras/Controller/uObrasController.pas index d575a94c..1a707854 100644 --- a/Source/Modulos/Obras/Controller/uObrasController.pas +++ b/Source/Modulos/Obras/Controller/uObrasController.pas @@ -5,7 +5,7 @@ interface uses Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, - uIDataModuleObras, uBizObras; + uIDataModuleObras, uBizObras, uBizDireccionesContacto; type IObrasController = interface(IObservador) @@ -25,6 +25,9 @@ type function Duplicar(AObra: IBizObra): IBizObra; procedure Preview(AObra : IBizObra); procedure Print(AObra : IBizObra); + + procedure QuitarDireccion(AObra: IBizObra); + procedure CopiarDireccion (const ADireccionEnvio: IBizDireccionesContacto; AObra: IBizObra); end; TObrasController = class(TObservador, IObrasController) @@ -66,6 +69,9 @@ type function Duplicar(AObra: IBizObra): IBizObra; procedure Preview(AObra : IBizObra); procedure Print(AObra : IBizObra); + + procedure QuitarDireccion(AObra: IBizObra); + procedure CopiarDireccion (const ADireccionEnvio: IBizDireccionesContacto; AObra: IBizObra); end; implementation @@ -120,6 +126,44 @@ begin FiltrarEmpresa(Result); end; +procedure TObrasController.CopiarDireccion(const ADireccionEnvio: IBizDireccionesContacto; AObra: IBizObra); +var + bEnEdicion : Boolean; +begin + if not Assigned(AObra) then + raise Exception.Create ('Obra no asignada (CopiarDireccion)'); + + if not Assigned(ADireccionEnvio) then + raise Exception.Create ('No se ha indicado la dirección (CopiarDireccionEnvio)'); + + if AObra.DataTable.Active then + AObra.DataTable.Active := True; + + if ADireccionEnvio.DataTable.Active then + ADireccionEnvio.DataTable.Active := True; + + + bEnEdicion := (AObra.DataTable.State in dsEditModes); + if not bEnEdicion then + AObra.Edit; + + ShowHourglassCursor; + AObra.Edit; + try + AObra.CALLE := ADireccionEnvio.CALLE; + AObra.POBLACION := ADireccionEnvio.POBLACION; + AObra.CODIGO_POSTAL := ADireccionEnvio.CODIGO_POSTAL; + AObra.PROVINCIA := ADireccionEnvio.PROVINCIA; + AObra.TELEFONO := ADireccionEnvio.TELEFONO; + AObra.PERSONA_CONTACTO := ADireccionEnvio.PERSONA_CONTACTO; + + if not bEnEdicion then + AObra.Post; + finally + HideHourglassCursor; + end; +end; + constructor TObrasController.Create; begin inherited; @@ -413,4 +457,35 @@ begin } end; +procedure TObrasController.QuitarDireccion(AObra: IBizObra); +var + bEnEdicion : Boolean; +begin + if not Assigned(AObra) then + raise Exception.Create ('Obra no asignada (QuitarDireccion)'); + + if AObra.DataTable.Active then + AObra.DataTable.Active := True; + + bEnEdicion := (AObra.DataTable.State in dsEditModes); + if not bEnEdicion then + AObra.Edit; + + ShowHourglassCursor; + AObra.Edit; + try + AObra.DataTable.FieldByName(fld_ObrasCALLE).Clear; + AObra.DataTable.FieldByName(fld_ObrasPOBLACION).Clear; + AObra.DataTable.FieldByName(fld_ObrasCODIGO_POSTAL).Clear; + AObra.DataTable.FieldByName(fld_ObrasPROVINCIA).Clear; + AObra.DataTable.FieldByName(fld_ObrasTELEFONO).Clear; + AObra.DataTable.FieldByName(fld_ObrasPERSONA_CONTACTO).Clear; + + if not bEnEdicion then + AObra.Post; + finally + HideHourglassCursor; + end; +end; + end. diff --git a/Source/Modulos/Obras/Obras_Group.groupproj b/Source/Modulos/Obras/Obras_Group.groupproj index e18054ed..a9b568d1 100644 --- a/Source/Modulos/Obras/Obras_Group.groupproj +++ b/Source/Modulos/Obras/Obras_Group.groupproj @@ -9,6 +9,7 @@ + @@ -111,14 +112,23 @@ + + + + + + + + + - + - + - + \ No newline at end of file diff --git a/Source/Modulos/Obras/Views/Obras_view.dpk b/Source/Modulos/Obras/Views/Obras_view.dpk index df631a544d1329da97adf74cc32777e9441681ef..c22ed4f74762332f964eaa891513e9c48bd76e03 100644 GIT binary patch delta 58 zcmZqW+{C%TmPuEKmrFsxIX|x?F}WnaI6fK3D$38vNi9N?$jwhl&Dm_rDelphi.Personality Package -FalseTrueFalseTrueFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Obras_view.dpk +FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Obras_view.dpk MainSource - - - - - - + + + + + + + +
fEditorListaObras
TfListaObras diff --git a/Source/Modulos/Obras/Views/Obras_view.res b/Source/Modulos/Obras/Views/Obras_view.res index 8b251f312bcccec5485024f6fe8d80e1cdf25746..1641339fcc482e7e3492d1b45813a86619622c33 100644 GIT binary patch literal 4748 zcmbW5&ub)A5XUPdpe&2#;C*uNAUVhgd+&(4um@dnom`vXF9g}ZuHJ;se=<3UNdFJg zbCw+UD9j$byGIXV`~6hC>h4S?F|k9X-j90q{Z_qtZ<;nUJCO8!h?p${kR>3GhM`oH*q zk=UsjOCIgA_4!`B+Gb&`I84R)bT4dy-BQV<-SyFz?R8ILEQ(+JB$u{sEXE@j@B*7W zT;iZH#|OJ<&DO$RCkM6VbK3(B(k{nbdv1lpc;E$xz9as|v3uE1V{hw2w~g3eD0an7 z{BT%G%irdMe*|oDJmgvJaA2`9B<6Xi*?M~Q;)@Sbfwf3uf zVaWkbUjU=;sL{BlYemIZXv%qZ{SZw{-TCU+;!nH6KDDIJumU+9{E0zXW4>7T)y|>$DQlv zRJe?TjSp{c!DqeayAnSMTtZZT;>LN7J0Rls+5m@q)MbyB*eL%Eu@(+$Cw}Pd@q7N| z%Q0*AHpCP^b9v`@jx-l_FD>khpW2W8(OU2&V5TrnoAY-m_hlcV?zq3;7{2gF{J#Hc z6R+o~mVenX?>@W0@_DVzyOFs(5464CY{!q9ChoF#_*eXi@4gFuV8?vhl=_w5$iKL0 zEV0nMBcN08xtRmsgJrqjh@s#|{?*ssnsG)mH*wa6{efF0JFWHok@kA5%b661{B38= zCcgJ|*ZFTpV$8<-&+AWpa)Q8*`wL&hMeNQ^v6I7$HSdLZhZ^&+6<@Uw_Zsml9^v3W zVvPDBKHh;i=RU4J_ta3E;)Mn>Y+L zKLZ0UQ+*km9FO-b?U4gmn-62iwzH6&*duKGo~aUV)bYDla8wWZ9+^7p-F<8lP@i!m z@vhbD_${F}h>^T;C(?(b*OJDk?{dEXB?nuehoON3HAb!7Mr7-ls!84-5V-jJugbu<_$}mU=Yd9!?TOX;|B-#B)+0x#9q*yqJiqS!`49d=7ztk$O+9=1i;?K_|J<8T z?0b7=-`Z3A#vV$4XJ5(lQ~TOZHUFdA%oWvK5zg&_IKXIbughQBA8XAsd#=@|TFLXC zy(^m((;DnQmDQKatmw!@c`| G?EMQ&4NnpP delta 11 ScmeBCZD5|Duvteife`=|>;pCc diff --git a/Source/Modulos/Obras/Views/uEditorObra.pas b/Source/Modulos/Obras/Views/uEditorObra.pas index 051af9b7..bec96ba7 100644 --- a/Source/Modulos/Obras/Views/uEditorObra.pas +++ b/Source/Modulos/Obras/Views/uEditorObra.pas @@ -122,6 +122,8 @@ end; procedure TfEditorObra.SetController(const Value: IObrasController); begin FController := Value; + if Assigned(FViewObra) and Assigned(FController) then + FViewObra.Controller := FController; end; procedure TfEditorObra.SetViewObra(const Value: IViewObra); diff --git a/Source/Modulos/Obras/Views/uViewClienteAsociadoObra.pas b/Source/Modulos/Obras/Views/uViewClienteAsociadoObra.pas index f3da308c..98c4b4dd 100644 --- a/Source/Modulos/Obras/Views/uViewClienteAsociadoObra.pas +++ b/Source/Modulos/Obras/Views/uViewClienteAsociadoObra.pas @@ -12,7 +12,7 @@ uses dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinSilver, dxSkinStardust, dxSkinsDefaultPainters, dxSkinValentine, dxSkinXmas2008Blue, - dxSkinsdxLCPainter; + dxSkinsdxLCPainter, dxSkinBlack; type TfrViewClienteAsociadoObra = class(TfrViewDatosYSeleccionCliente) diff --git a/Source/Modulos/Obras/Views/uViewObra.dfm b/Source/Modulos/Obras/Views/uViewObra.dfm index 45358316..982ddd8a 100644 --- a/Source/Modulos/Obras/Views/uViewObra.dfm +++ b/Source/Modulos/Obras/Views/uViewObra.dfm @@ -1,6 +1,6 @@ inherited frViewObra: TfrViewObra - Width = 661 - Height = 479 + Width = 451 + Height = 304 Align = alClient AutoSize = True ExplicitWidth = 451 @@ -8,18 +8,16 @@ inherited frViewObra: TfrViewObra object dxLayoutControlObra: TdxLayoutControl Left = 0 Top = 0 - Width = 661 - Height = 479 + Width = 451 + Height = 304 Align = alClient ParentBackground = True TabOrder = 0 TabStop = False AutoContentSizes = [acsWidth, acsHeight] - ExplicitWidth = 451 - ExplicitHeight = 304 DesignSize = ( - 661 - 479) + 451 + 304) object eNombre: TcxDBTextEdit Left = 130 Top = 34 @@ -141,10 +139,10 @@ inherited frViewObra: TfrViewObra StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True TabOrder = 5 - Width = 205 + Width = 116 end object eCodigoPostal: TcxDBTextEdit - Left = 234 + Left = 189 Top = 145 DataBinding.DataField = 'CODIGO_POSTAL' DataBinding.DataSource = DADataSource @@ -185,7 +183,7 @@ inherited frViewObra: TfrViewObra StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True TabOrder = 3 - Width = 65 + Width = 20 end object eObservaciones: TcxDBMemo Left = 22 @@ -208,7 +206,7 @@ inherited frViewObra: TfrViewObra Width = 390 end inline frViewSubcontrataObra1: TfrViewSubcontrataObra - Left = 321 + Left = 276 Top = 283 Width = 136 Height = 150 @@ -220,13 +218,13 @@ inherited frViewObra: TfrViewObra ParentFont = False TabOrder = 10 ReadOnly = False - ExplicitLeft = 321 + ExplicitLeft = 276 ExplicitTop = 283 ExplicitWidth = 136 ExplicitHeight = 150 inherited dxLayoutControl1: TdxLayoutControl Width = 136 - ExplicitWidth = 173 + ExplicitWidth = 136 inherited edtlNombre: TcxDBTextEdit ExplicitWidth = 213 Width = 213 @@ -282,9 +280,9 @@ inherited frViewObra: TfrViewObra end end inline frViewClienteAsociadoObra1: TfrViewClienteAsociadoObra - Left = 321 + Left = 276 Top = 34 - Width = 351 + Width = 136 Height = 213 Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -294,15 +292,15 @@ inherited frViewObra: TfrViewObra ParentFont = False TabOrder = 9 ReadOnly = False - ExplicitLeft = 321 + ExplicitLeft = 276 ExplicitTop = 34 - ExplicitWidth = 351 + ExplicitWidth = 136 ExplicitHeight = 213 inherited dxLayoutControl1: TdxLayoutControl - Width = 351 + Width = 136 Height = 213 - ExplicitWidth = 405 - ExplicitHeight = 159 + ExplicitWidth = 351 + ExplicitHeight = 213 inherited edtlNombre: TcxDBTextEdit ExplicitWidth = 210 Width = 210 @@ -324,12 +322,12 @@ inherited frViewObra: TfrViewObra Width = 210 end inherited edtCodigoPostal: TcxDBTextEdit - Left = 209 - ExplicitLeft = 209 + Left = 192 + ExplicitLeft = 192 end inherited Button3: TBitBtn - Left = 99 - ExplicitLeft = 99 + Left = 82 + ExplicitLeft = 82 end end end diff --git a/Source/Modulos/Obras/Views/uViewObra.pas b/Source/Modulos/Obras/Views/uViewObra.pas index ec1bcf58..da6d1d8c 100644 --- a/Source/Modulos/Obras/Views/uViewObra.pas +++ b/Source/Modulos/Obras/Views/uViewObra.pas @@ -14,7 +14,8 @@ uses dxSkinMcSkin, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinSilver, dxSkinStardust, dxSkinsDefaultPainters, dxSkinValentine, - dxSkinXmas2008Blue, dxSkinsdxLCPainter, cxGraphics, cxMaskEdit, cxDropDownEdit; + dxSkinXmas2008Blue, dxSkinsdxLCPainter, cxGraphics, cxMaskEdit, cxDropDownEdit, + dxSkinBlack, uObrasController; type IViewObra = interface(IViewBase) @@ -22,8 +23,11 @@ type function GetObra: IBizObra; procedure SetObra(const Value: IBizObra); property Obra: IBizObra read GetObra write SetObra; + function GetController : IObrasController; + procedure SetController (const Value : IObrasController); + property Controller: IObrasController read GetController write SetController; end; - + TfrViewObra = class(TfrViewBase, IViewObra) DADataSource: TDADataSource; ePersonaContacto: TcxDBTextEdit; @@ -59,7 +63,7 @@ type dxLayoutControlObraGroup10: TdxLayoutGroup; dxLayoutControlObraItem8: TdxLayoutItem; frViewSubcontrataObra1: TfrViewSubcontrataObra; - frViewClienteAsociadoObra1: TfrViewClienteAsociadoObra; + frViewClienteAsociadoObra1: TfrViewClienteAsociadoObra; dxLayoutControlObraItem12: TdxLayoutItem; dxLayoutControlObraItem13: TdxLayoutItem; dxLayoutControlObraGroup11: TdxLayoutGroup; @@ -67,6 +71,7 @@ type procedure cbProvinciaPropertiesInitPopup(Sender: TObject); protected FObra: IBizObra; + FController : IObrasController; FProvincias : TStringList; FPoblaciones : TStringList; procedure CargarProvincias; @@ -74,17 +79,21 @@ type function GetObra: IBizObra; procedure SetObra(const Value: IBizObra); procedure OnClienteChanged(Sender : TObject); - procedure OnSubcontrataChanged(Sender : TObject); + procedure OnSubcontrataChanged(Sender : TObject); + function GetController : IObrasController; + procedure SetController (const Value : IObrasController); virtual; public constructor Create(AOwner : TComponent); override; destructor Destroy; override; property Obra: IBizObra read GetObra write SetObra; + property Controller: IObrasController read GetController write SetController; end; - + implementation uses - uDataModuleObras, uProvinciasPoblacionesController, uStringsUtils; + uDataModuleObras, uProvinciasPoblacionesController, uStringsUtils, + uClientesController, uBizDireccionesContacto; {$R *.dfm} @@ -184,20 +193,60 @@ begin if Assigned(FPoblaciones) then FreeANDNIL(FPoblaciones); + FObra := Nil; + FController := Nil; inherited; end; +function TfrViewObra.GetController: IObrasController; +begin + Result := FController; +end; + function TfrViewObra.GetObra: IBizObra; begin Result := FObra; end; procedure TfrViewObra.OnClienteChanged(Sender: TObject); +var + AClientesController : IClientesController; + ADireccion : IBizDireccionesContacto; + begin if Assigned(FObra) then begin FObra.Edit; FObra.ID_CLIENTE := frViewClienteAsociadoObra1.ID_Cliente; + + AClientesController := TClientesController.Create; + try + { // Esto podría ser configurable en el programa + if not AClientesController.TieneDatosBancarios(FPresupuesto.Cliente) then + MessageBox(0, 'Este cliente no tiene datos bancarios en su ficha', 'Atención', MB_ICONWARNING or MB_OK);} + + case frViewClienteAsociadoObra1.Cliente.Direcciones.RecordCount of + 0 : begin + FController.QuitarDireccion(FObra); + end; + 1 : begin + FController.CopiarDireccion(frViewClienteAsociadoObra1.Cliente.Direcciones, FObra); + end + else begin + ADireccion := AClientesController.ElegirDireccionEntrega(frViewClienteAsociadoObra1.Cliente.Direcciones, ''); + ShowHourglassCursor; + try + if Assigned(ADireccion) then + FController.CopiarDireccion(ADireccion, FObra); + finally + HideHourglassCursor; + ADireccion := NIL; + end; + end; + end; + finally + AClientesController := NIL; + end; end; end; @@ -210,6 +259,11 @@ begin end; end; +procedure TfrViewObra.SetController(const Value: IObrasController); +begin + FController := Value; +end; + procedure TfrViewObra.SetObra(const Value: IBizObra); begin FObra := Value; diff --git a/Source/Modulos/Obras/Views/uViewSubcontrataObra.pas b/Source/Modulos/Obras/Views/uViewSubcontrataObra.pas index c8cff2b0..290b898c 100644 --- a/Source/Modulos/Obras/Views/uViewSubcontrataObra.pas +++ b/Source/Modulos/Obras/Views/uViewSubcontrataObra.pas @@ -12,7 +12,7 @@ uses dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinSilver, dxSkinStardust, dxSkinsDefaultPainters, dxSkinValentine, dxSkinXmas2008Blue, - dxSkinsdxLCPainter; + dxSkinsdxLCPainter, dxSkinBlack; type TfrViewSubcontrataObra = class(TfrViewDatosYSeleccionProveedor)