diff --git a/Database/udfs/udf_RtfToText.sql.bak b/Database/udfs/udf_RtfToText.sql.bak deleted file mode 100644 index e69de29b..00000000 diff --git a/Source/Modulos/Informe ventas por articulo/Controller/uInfVentasArticuloInformeRegister.pas.bak b/Source/Modulos/Informe ventas por articulo/Controller/uInfVentasArticuloInformeRegister.pas.bak deleted file mode 100644 index 65ac2491..00000000 --- a/Source/Modulos/Informe ventas por articulo/Controller/uInfVentasArticuloInformeRegister.pas.bak +++ /dev/null @@ -1,23 +0,0 @@ -unit uInfVentasArticuloViewRegister; - -interface - -procedure RegisterViews; -procedure UnregisterViews; - -implementation - -uses - uEditorRegistryUtils, uEditorInfVentasArticulo; - -procedure RegisterViews; -begin - EditorRegistry.RegisterClass(TfEditorInfVentasArticulo, 'EditorInfVentasArticulo'); -end; - -procedure UnregisterViews; -begin - EditorRegistry.UnRegisterClass(TfEditorInfVentasArticulo); -end; - -end. diff --git a/Source/Modulos/Informe ventas por articulo/Plugin/uPluginInfVentasArticulo.dfm.bak b/Source/Modulos/Informe ventas por articulo/Plugin/uPluginInfVentasArticulo.dfm.bak deleted file mode 100644 index ac3979f4..00000000 --- a/Source/Modulos/Informe ventas por articulo/Plugin/uPluginInfVentasArticulo.dfm.bak +++ /dev/null @@ -1,330 +0,0 @@ -object PluginVentasArticulo: TPluginVentasArticulo - OldCreateOrder = True - DefaultAction = actVentasArticulo - Description = 'Informes' - ModuleMenu = MainMenu - ModuleName = 'InfVentasArticulo' - SmallImages = SmallImages - LargeImages = LargeImages - Author = 'Rodax Software' - Version = '1.0.0' - Height = 252 - Width = 401 - object LargeImages: TPngImageList - Height = 24 - Width = 24 - PngImages = < - item - PngImage.Data = { - 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D - F80000000970485973000017120000171201679FD25200000A4D694343505068 - 6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF - F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A - 561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5 - 7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8 - 1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC - 01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200 - C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05 - 00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2 - 00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C - CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97 - 4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313 - 48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F - 223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA - 560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED - 2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383 - FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A - F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86 - 4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432 - 79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0 - 812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C - 0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70 - 170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261 - 48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA - 90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F - 5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961 - 5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402 - 8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2 - 272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93 - 48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90 - 6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452 - A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650 - 2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83 - 1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7 - 192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295 - 3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9 - 09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685 - 46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9 - EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C - 4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED - EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB - 79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31 - 3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87 - 67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94 - 6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85 - A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6 - 5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29 - D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B - 743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6 - 4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD - D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7 - C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E - 3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B - FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5 - 0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1 - 15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0 - 476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67 - BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845 - F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC - A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7 - 6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA - 68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C - 949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423 - F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433 - DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317 - 772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2 - A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17 - 955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4 - EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E - CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9 - 26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD - 8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF - B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C - 7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD - EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293 - E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7 - 5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F - EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6 - EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07 - FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247 - CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73 - ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC - CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F - F73EE77CFEFC2FF784F3FB25D29F33000003994944415478DADD956B4C536718 - C7FFA73D948A144924A5748245A41871C14B0C83CD006A362A23A27C5051BE28 - 5B30F116257ED02D210CA323982C3A4D0CC8166FA87138A651515462B0782B58 - A1CC4B90724B0B4DB958E9E55C77CE99769A490AEABEEC4D4E9EF39C93F7FF7B - 2EEF85E0791EFFE520FE1F0082203E58C8A801DF6607BE153445FF75E01F0520 - 8A276FDF0C59F54154B4FC0DF9688073A78FF05FA42F47A44183261B2066218E - 6F789EF860C0AD4A2DAFFFBA1976BB1D56AB15EAC21CBC2ED35B191CDDBF79C2 - 9DD687D72075C50118CF6FC160C46109525A5A8AE26D392828FAF9DF80759BE6 - 8C4B98E758DC3FB5471247EF6E0CDB3AD0DEAB465EB10C0FEA57E2C73DB79198 - 94820D3B0E12130604126FB9DF87AB57AD78F4C48DFABBEDEF0664FE9A3926A0 - 844C1D539C6368985B060203DE2772515C7C5A5B87260E10C5C5C9A6B365485D - A8F28BAF2D2151535D00AB7D0A7CEC545014851783BDE8B298F0E8E133442CC8 - 275C2EDFF84AF4796711A6CB2C98153722F9EBCBC260D87E0486845024C445A3 - C1D882D90933209791B03CB5E2FAA51A7883356AF728ED1833038EA1C0D2B464 - CBCA4DF82ADE88DFEA38FC7E4F89FD3FEDC40CBD017A5D14144124B67C7700B9 - D91998191B83510F85271D3DB872F34E55778F63E33B016F8AE7179A31DCDF89 - B8995AECDBA54357BF0A4E7605D23E4B0429974146C8B0A3F810B23317214E37 - 0D1E2F030FC5A0F1AE197537EE190296C879281BB1FA4454EC8D927AD1D01A8F - E494358852878313E62A150A14951C468E210DBA182DDC5E1A3E8A469FDD8963 - 672EFDF216E0CDC8A59541BFB2CC3FB6CE92862F172F836A5230E4A41CCFBB6D - F87E6F059212E3B128651E5C6EAF50360554612A549DAA35F9017985FA80E2E2 - FFBAF6742CC9C8C264651094CA60DC6834E1CC1F37E17A318A984F22E1F151D0 - 6AD458929E8AAA93B5CD7EC0AA0DB168BC680CB89BFF1C9A8F8CA5F9981A1E2A - F95E9FB084CD8F11A989408C5603AF501EF15B77DF002A8F9F3FE60758CC4DE3 - 3A8BD8C93A24676EC5C2B9B3C45D22F401082249A9EE6E8F0F0CCB8362183408 - 99D55EB896E53FAE2BCB37F1D567AF0704107212D33E5D8ADCD5F9D0456BA49B - 8B6538709C28CC8211DEDB9F75A2E642FD89DEEEBE8209DFC91B7F388A910147 - 54982AB45C686C5EBC2E5AEA05CB71181A7909CBE30E3436351FB7F53B76122C - 6B7F2FC0A87310AE971E05182E6B52A832372424640E4D33BC7370B8CD61739E - F3B0D4658582A458AF0F7F0103967A78C20D9F140000000049454E44AE426082} - Name = 'PngImage0' - Background = clWindow - end> - Left = 232 - Top = 16 - Bitmap = {} - end - object ModuleActionList: TActionList - Images = LargeImages - Left = 40 - Top = 72 - object actVentasArticulo: TAction - Category = 'Informes' - Caption = 'Ventas articulo' - ImageIndex = 0 - OnExecute = actVentasArticuloExecute - end - end - object MainMenu: TMainMenu - Images = LargeImages - Left = 40 - Top = 16 - object HistoricoMovimientos1: TMenuItem - Caption = 'Log'#237'stica' - object N1: TMenuItem - Tag = 889 - Caption = '-' - end - object HistoricoMovimiento1: TMenuItem - Tag = 103 - Action = actVentasArticulo - end - end - end - object SmallImages: TPngImageList - PngImages = < - item - PngImage.Data = { - 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF - 610000000970485973000017120000171201679FD2520000016C4944415478DA - 63FCFFFF3F0325809114C53F0C18C0B6715C40E823DA009066D6A85C86DFCB26 - 332CBAC0C09006D54B9401276630FC7FA27489E1CDA5A50C4C259D6031B80173 - 7A72F006820ECF14063D9F290C2F6F6D635878C88C41AAA18181A927072C9752 - 3285116C404C8E0E56CD171664C0358370488B0CC3C563090C7F7FFD60686FDC - CFA0AD6FC90037C06381038AE60E060D0CCD2A357B1856B9CC61387BFC3EC3AE - 5D0F182EDDFCC680D505F86C06E10B679F631A00734104EB690683DFB10CE26A - 5E2836C3C062B34E862B573FE176C182A5DC0C09B1910C17E6B180359F3F1C03 - B7F9DFEF9F60FAFAED5FB85D70A7C5056E18B2E64B175EA37813AB0BC08A7F42 - 34FC816A84D90C72B663A82BC3CB4B4718264CBECE5090ABC99094731661003E - CD30676BA973C2357389483344446C82181099A6C27068E361822912E46C9866 - 566E3E8660DF251003AE5E3C4E547E40D6CCC12FCCE06D3711929E41862C5FB5 - 972843D0010013390BFAA171B8130000000049454E44AE426082} - Name = 'PngImage0' - Background = clWindow - end> - PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] - Left = 308 - Top = 16 - Bitmap = {} - end - object ExtraImages: TPngImageList - Height = 28 - Width = 28 - PngImages = < - item - PngImage.Data = { - 89504E470D0A1A0A0000000D494844520000001C0000001C0806000000720DDF - 940000000970485973000017120000171201679FD25200000A4D694343505068 - 6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF - F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A - 561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5 - 7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8 - 1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC - 01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200 - C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05 - 00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2 - 00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C - CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97 - 4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313 - 48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F - 223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA - 560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED - 2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383 - FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A - F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86 - 4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432 - 79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0 - 812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C - 0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70 - 170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261 - 48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA - 90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F - 5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961 - 5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402 - 8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2 - 272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93 - 48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90 - 6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452 - A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650 - 2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83 - 1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7 - 192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295 - 3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9 - 09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685 - 46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9 - EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C - 4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED - EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB - 79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31 - 3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87 - 67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94 - 6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85 - A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6 - 5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29 - D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B - 743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6 - 4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD - D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7 - C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E - 3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B - FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5 - 0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1 - 15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0 - 476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67 - BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845 - F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC - A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7 - 6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA - 68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C - 949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423 - F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433 - DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317 - 772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2 - A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17 - 955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4 - EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E - CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9 - 26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD - 8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF - B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C - 7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD - EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293 - E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7 - 5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F - EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6 - EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07 - FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247 - CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73 - ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC - CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F - F73EE77CFEFC2FF784F3FB25D29F33000004D04944415478DAB5D67B4C53571C - 07F0EFAD158421EF47784C1E6188802E76EAC6985308CCB82D03C6080B6AE644 - 890B2EC384FDB1C581D9D823664BF6874B868A5930640C2C3E46DC446860C196 - 0DCA73C884858A3C4691475B2B8F7B7BEFDD39B7D06120F2189CA43DBDCDE9F9 - DCDFEF9CDFB965445104C330588B56EC2C13697FC024D80066AD408ABD7D2A0B - B2DE4BD0280D787108CC9A81140B7614109DE20AA80DE89C7245F380498A74D5 - C1CB2505E24B7B13D176200009631609A3EDCEE843340EF3AB1BE1ADA21C91F3 - 8C839F9F1FC60D0F60CA7E055E43D232E2FA10F015C9E8AA81353F1C1777C547 - 41D6DF889FEEEEC5A6407F180D8FC09C4E86A64594303A6E55C0B9D830678660 - 99864A970C9665919F9F8FFEFEFED5DBA50B61067D1FA60C2D782B3FE031CC06 - 167EF3BEB8122CD4D3822761A7B393A4714773CE32F3C08327A29685D597B4D8 - 30FDB411023F0DE3F0A00DD3AA52C90D7038F3A50691CF46DBD015814BC55AB4 - FFA0B2F21EDAEE4EA0FA8FCE95814BC5040B8BB6D6D1A581DFDE787D41EC0553 - FE3C6C543F8E9E1139CA1A15D8B23301DEF63AC819139E761B85601E80AAEAEF - 9547F8595E1538311159AF954B589BCE057DE23E04856C85AFB707C60C26B838 - 3B616A9A436FBF1E5DDD7F62ACAB0A7FB5752E1FBC7AA11EED7D6628C85D37B9 - 9E44F8A63AD807A4226A73081C37D8C16EBD1CEF7EF0053E3E79183E5E1E304F - 4CC1649E44736B276A6F2A71BDBC7879297DF87B36725EB6834ED58946B902EE - 7B32B03D2A145EEE1B41E7B0F002D28EE522EFC30CF8FB7A83E5784C9248C78D - 66D437B6A3A9BDEB9DCB05A78A168D5014785CBBD88006752DB214C1D0DE17A0 - 0BCBC01BAFC6C3DFDB558A8CE3797004483DFA8915F4F321D716820A0465313C - 62C4D55F6A06FA07C6229E08528CEEB8F4C36AF4747722D04B847F642C12538E - 4011190CD78D8ED20969B108E02C0B83F47B0389B2B5A35BFC55557F6449292D - CEDB8FE0B048A4C76E80D95981E7762622D0D703EBE57209140481A03CD232F3 - 909B9381003F6B4A598B35F2C9291683FA319C2B52962C08CE46C673ACB56727 - 2170D6DA2AAD8BC0EEE87DF0F771C53A994C1A2F90392A6EA971B65009C5B670 - A425C54B91D1751578111E9EEE181A1E4361F115CD3C904ECACF4C3E5BC0C29C - EBB2DB518889DE4FCAC0053219233D7328987BA6104E4F39E23775339C49AAC9 - 57A00734CD42F67B873041A22CBC545EFF18B818467BA53A183B76A5C2974428 - 9F89904E7EA7FB1E4AAF5563FBD6CD88DBBDC3B6AE1CE9695D0E0C8DE0BBF325 - A53630FD78D8A218ED1BBADDC03AA690FA0B92EA4F5A431A0D79E3C95AF2022D - 115E02694A67374D737B97F8F30DD5311B9896118CBA0AF5A2A70D2BD8413B1C - 8784D83D707371827C9D8CA44E241B876E9E1994B7BE389E46C7423F328E52E5 - 4DBDAE47176E033B5A354B3ABC699B727806913187B02D22545A2F869149C54F - 414102AD07C134CB6164DC004D431B6AEB1A339B2A0BCEDB9EF817BE3E21FE58 - 5ABD64D439E879C42424212A3C144E8EF6D612218DA69496C4A3894972B44D40 - DBDC014DF515DCAEA9F8EF685B4E9BFB77E4CDCC4F337D3CDD3FDF1216E211E0 - EB4D02652490632DE8E91D10B52D1D0F74F7073F6AAEFCFEA2EDF7FF07A42DF9 - 609EF784C0A6928FB10E0EF6811C278806A3B1979DE654C2A4A54C5B7B6E64EE - F87F01D93AAAB3863CD3F20000000049454E44AE426082} - Name = 'PngImage0' - Background = clWindow - end> - Left = 232 - Top = 80 - Bitmap = {} - end -end diff --git a/Source/Modulos/Informe ventas por articulo/Plugin/uPluginInfVentasArticulo.pas.bak b/Source/Modulos/Informe ventas por articulo/Plugin/uPluginInfVentasArticulo.pas.bak deleted file mode 100644 index ddffd070..00000000 --- a/Source/Modulos/Informe ventas por articulo/Plugin/uPluginInfVentasArticulo.pas.bak +++ /dev/null @@ -1,77 +0,0 @@ -unit uPluginInfVentasArticulo; - -interface - -uses - uModuleController, uInterfaces, uHostManager, Menus, Classes, ActnList, - ImgList, Controls, PngImageList; - -type - IMCInfVentasArticulo = interface(IInterface) - ['{6AB7F54B-AEAD-4317-907C-B54758666AB8}'] - end; - - TPluginInfVentasArticulo = class(TModuleController, IMCInfVentasArticulo) - actVentasArticulo: TAction; - ExtraImages: TPngImageList; - LargeImages: TPngImageList; - MainMenu: TMainMenu; - ModuleActionList: TActionList; - SmallImages: TPngImageList; - HistoricoMovimientos1: TMenuItem; - HistoricoMovimiento1: TMenuItem; - N1: TMenuItem; - procedure actVentasArticuloExecute(Sender: TObject); - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - end; - -implementation - -{$R *.dfm} - -uses - Forms, Dialogs, SysUtils; -// uHistoricoMovimientosController, uBizHistoricoMovimientos, uHistoricoMovimientosViewRegister; - -function GetModule : TModuleController; -begin - Result := TPluginInfVentasArticulo.Create(NIL); -end; - -exports - GetModule name GET_MODULE_FUNC; - -procedure TPluginInfVentasArticulo.actVentasArticuloExecute(Sender: TObject); -{var - AHistoricoMovimientosController : IHistoricoMovimientosController; - AHistoricoMovimientos : IBizHistoricoMovimientos; -} -begin -showmessage('Hola'); -{ AHistoricoMovimientosController := THistoricoMovimientosController.Create; - AHistoricoMovimientos := (AHistoricoMovimientosController.BuscarTodos as IBizHistoricoMovimientos); - AHistoricoMovimientosController.VerTodos(AHistoricoMovimientos); -} -end; - -constructor TPluginVentasArticulo.Create(AOwner: TComponent); -begin - inherited; -// uInfVentasArticuloViewRegister.RegisterViews; -end; - -destructor TPluginVentasArticulo.Destroy; -begin -// uInfVentasArticuloViewRegister.UnregisterViews; - inherited; -end; - -initialization - RegisterModuleClass(TPluginInfVentasArticulo); - -finalization - UnRegisterModuleClass(TPluginInfVentasArticulo); - -end. diff --git a/Source/Modulos/Informes base/Views/uInformesViewRegister.pas.bak b/Source/Modulos/Informes base/Views/uInformesViewRegister.pas.bak deleted file mode 100644 index 231a50c2..00000000 --- a/Source/Modulos/Informes base/Views/uInformesViewRegister.pas.bak +++ /dev/null @@ -1,23 +0,0 @@ -unit uInformesBaseViewRegister; - -interface - -procedure RegisterViews; -procedure UnregisterViews; - -implementation - -uses - uEditorRegistryUtils, uEditorInformesBase; - -procedure RegisterViews; -begin - EditorRegistry.RegisterClass(TfEditorInformesBase, 'EditorInformesBase'); -end; - -procedure UnregisterViews; -begin - EditorRegistry.UnRegisterClass(TfEditorInformesBase); -end; - -end. diff --git a/Source/Modulos/Informes base/Views/uViewInformeBase.pas.bak b/Source/Modulos/Informes base/Views/uViewInformeBase.pas.bak deleted file mode 100644 index 8150715b..00000000 --- a/Source/Modulos/Informes base/Views/uViewInformeBase.pas.bak +++ /dev/null @@ -1,179 +0,0 @@ -unit uViewInforme; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Forms, - Dialogs, uViewBase, TBXDkPanels, StdCtrls, ComCtrls, TB2Dock, - uViewAgrupaciones, uCustomView, uViewColumnas, ImgList, PngImageList, - ActnList, uViewInformeGrid, uBizInformesBase, uViewSumarios, - uViewInformeParametros, uViewFiltros, cxStyles, Controls; - -type - IViewInforme = interface(IViewBase) - ['{D716BE6B-1F41-4825-9385-0231D2AEF819}'] - function GetModificable: Boolean; - procedure SetModificable(const Value: Boolean); - property Modificable : Boolean read GetModificable write SetModificable; - - function GetInforme: IBizInforme; - procedure SetInforme(const Value: IBizInforme); - property Informe: IBizInforme read GetInforme write SetInforme; - - function GetOnViewChanged : TNotifyEvent; - procedure SetOnViewChanged(const Value : TNotifyEvent); - property OnViewChanged: TNotifyEvent read GetOnViewChanged write SetOnViewChanged; - end; - - TfrViewInforme = class(TfrViewBase, IViewInforme) - TBXMultiDock1: TTBXMultiDock; - pnlParametros: TTBXDockablePanel; - TBXAlignmentPanel2: TTBXAlignmentPanel; - TBXLink1: TTBXLink; - TBXLink5: TTBXLink; - TBXLink2: TTBXLink; - pcParametros: TPageControl; - TabSheet5: TTabSheet; - tsColumnas: TTabSheet; - tsAgrupacion: TTabSheet; - TBXAlignmentPanel3: TTBXAlignmentPanel; - bRefrescar: TButton; - pnlTareas: TTBXDockablePanel; - TBXPageScroller1: TTBXPageScroller; - TBXAlignmentPanel1: TTBXAlignmentPanel; - bFiltros: TTBXLink; - bSumarios: TTBXLink; - pcTareas: TPageControl; - tsSumarios: TTabSheet; - tsFiltros: TTabSheet; - frViewColumnas1: TfrViewColumnas; - frViewAgrupaciones1: TfrViewAgrupaciones; - SmallImages: TPngImageList; - LargeImages: TPngImageList; - EditorActionList: TActionList; - actAgrupaciones: TAction; - actColumnas: TAction; - actSumarios: TAction; - actFiltros: TAction; - frViewSumarios1: TfrViewSumarios; - actRefrescar: TAction; - frViewFiltros1: TfrViewFiltros; - procedure actColumnasExecute(Sender: TObject); - procedure actSumariosExecute(Sender: TObject); - procedure actFiltrosExecute(Sender: TObject); - procedure actAgrupacionesExecute(Sender: TObject); - protected - FInforme : IBizInforme; - FOnViewChanged : TNotifyEvent; - FModificable : Boolean; - procedure ActivarTarea (const ATarea : Integer); virtual; - function GetInforme: IBizInforme; virtual; - procedure SetInforme(const Value: IBizInforme); virtual; - function GetOnViewChanged : TNotifyEvent; virtual; - procedure SetOnViewChanged(const Value : TNotifyEvent); virtual; - function GetModificable: Boolean; virtual; - procedure SetModificable(const Value: Boolean); virtual; - public - property Modificable : Boolean read GetModificable write SetModificable; - property OnViewChanged: TNotifyEvent read GetOnViewChanged write SetOnViewChanged; - property Informe: IBizInforme read GetInforme write SetInforme; - constructor Create(AOwner: TComponent); override; - end; - -implementation - -{$R *.dfm} - -const - COLUMNAS = 1; - AGRUPACIONES = 2; - SUMARIOS = 3; - FILTROS = 4; - - -procedure TfrViewInforme.actColumnasExecute(Sender: TObject); -begin - inherited; - ActivarTarea(COLUMNAS); - frViewColumnas1.Refresh; -end; - -procedure TfrViewInforme.ActivarTarea(const ATarea: Integer); -begin - case ATarea of - COLUMNAS : pcParametros.ActivePage := tsColumnas; - AGRUPACIONES : pcParametros.ActivePage := tsAgrupacion; - SUMARIOS : pcTareas.ActivePage := tsSumarios; - FILTROS : pcTareas.ActivePage := tsFiltros; - end; -end; - -function TfrViewInforme.GetInforme: IBizInforme; -begin - Result := FInforme; -end; - -procedure TfrViewInforme.SetInforme(const Value: IBizInforme); -begin - FInforme := Value; - frViewColumnas1.Refresh; - frViewAgrupaciones1.Refresh; - - // ¿Es modificable el Informe? -// Self.Modificable := FInforme.EsModificable; -end; - -procedure TfrViewInforme.actSumariosExecute(Sender: TObject); -begin - inherited; - ActivarTarea(SUMARIOS); - frViewSumarios1.Refresh; -end; - -procedure TfrViewInforme.actFiltrosExecute(Sender: TObject); -begin - inherited; - ActivarTarea(FILTROS); - frViewFiltros1.Refresh; - end; - -procedure TfrViewInforme.actAgrupacionesExecute(Sender: TObject); -begin - inherited; - ActivarTarea(AGRUPACIONES); - frViewAgrupaciones1.Refresh; -end; - -function TfrViewInforme.GetOnViewChanged: TNotifyEvent; -begin - Result := FOnViewChanged; -end; - -procedure TfrViewInforme.SetOnViewChanged(const Value: TNotifyEvent); -begin - FOnViewChanged := Value; -end; - -constructor TfrViewInforme.Create(AOwner: TComponent); -begin - inherited; - FModificable := False; - pcParametros.ActivePage := tsColumnas; - pcTareas.ActivePage := tsSumarios; - FOnViewChanged := nil; -end; - -function TfrViewInforme.GetModificable: Boolean; -begin - Result := FModificable; -end; - -procedure TfrViewInforme.SetModificable(const Value: Boolean); -begin - FModificable := Value; - - frViewColumnas1.Modificable := FModificable; - frViewAgrupaciones1.Modificable := FModificable; -end; - -end. diff --git a/Source/Modulos/Informes base/Views/uViewSumarios.pas.bak b/Source/Modulos/Informes base/Views/uViewSumarios.pas.bak deleted file mode 100644 index 85f31f95..00000000 --- a/Source/Modulos/Informes base/Views/uViewSumarios.pas.bak +++ /dev/null @@ -1,325 +0,0 @@ -unit uViewSumarios; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uViewBase, dxLayoutControl, cxControls, cxContainer, cxListBox, - TBXDkPanels, ActnList, cxCustomData, cxGridDBTableView, cxGridTableView, - cxGraphics, cxStyles, cxTL, cxTextEdit, cxDropDownEdit, ImgList, - PngImageList, ComCtrls, JvExComCtrls, JvComCtrls, cxInplaceContainer, - ExtCtrls, cxEdit, cxVGrid, TBXToolPals, uViewControlGrid, - uViewParametrosControlGrid; - -type - IViewSumarios = interface(IViewParametrosControlGrid) - ['{4AEE3447-C6A4-491F-87E7-02CD255A7695}'] - end; - - TfrViewSumarios = class(TfrViewParametrosControlGrid, IViewSumarios) - PngImageList1: TPngImageList; - vgSumarios: TcxVerticalGrid; - TBXLabel1: TTBXLabel; - cxStyleRepository1: TcxStyleRepository; - cxStyleNombreColumna: TcxStyle; - cxStyleCategoria: TcxStyle; - cxStyleNombreColumnaInactivo: TcxStyle; - cxStyleCategoriaInactivo: TcxStyle; - cxStyleContentInactivo: TcxStyle; - procedure vgSumariosEditorRowInitPopup(Sender: TObject); - procedure vgSumariosEditorRowEditValueChanged( - Sender: TObject); - protected - procedure RellenarArbolTotales; - - function AnadirSumario(const ACaption : String; - const AKind : TcxSummaryKind) : TcxEditorRow; - - procedure RellenarTotalesPie; - procedure RellenarTotalesGrupo(const AGroupName : String); - procedure RellenarCategorias; - procedure RellenarCategoria(const APosition : TcxSummaryPosition; - const AGroupName : String = ''); - - procedure AplicarSumarioVista(const APosition : TcxSummaryPosition; - const AColumnCaption : String; const AKind : TcxSummaryKind); - procedure SetModificable(const Value: Boolean); override; - public - procedure Execute; override; - procedure Refresh; override; - end; - -implementation - -{$R *.dfm} - -uses - DB, cxGridPopupMenuConsts; - -var - SumaryKindStrArray : array[skNone..skAverage] of String - = ('', 'Sumar', 'Mínimo', 'Máximo', 'Contar', 'Promedio'); - -procedure TfrViewSumarios.Refresh; -begin - RellenarCategorias; -end; - -procedure TfrViewSumarios.RellenarArbolTotales; -var - i : Integer; -begin - // Recuperar las agrupaciones del grid - for i := 0 to ViewControlGrid.GroupedColumnCount - 1 do - begin - if i = 3 then - Break; // Sólo meter las 3 primera agrupaciones - RellenarCategoria(spGroup, ViewControlGrid.GroupedColumns[i].Caption); - end; -end; - -function TfrViewSumarios.AnadirSumario(const ACaption : String; - const AKind : TcxSummaryKind) : TcxEditorRow; -begin - Result := vgSumarios.Add(TcxEditorRow) as TcxEditorRow; - with Result do - begin - Properties.Caption := ACaption; - Properties.Value := SumaryKindStrArray[AKind]; - Properties.ImageIndex := 2; - Properties.EditPropertiesClass := TcxComboBoxProperties; - with TcxComboBoxProperties(Properties.EditProperties) do - begin - ImmediateDropDown := True; - DropDownListStyle := lsFixedList; - ImmediatePost := True; - ImmediateUpdateText := True; - PostPopupValueOnTab := True; - OnInitPopup := vgSumariosEditorRowInitPopup; - OnEditValueChanged := vgSumariosEditorRowEditValueChanged; - end; - end; -end; - -procedure TfrViewSumarios.AplicarSumarioVista ( - const APosition: TcxSummaryPosition; const AColumnCaption: String; - const AKind: TcxSummaryKind); -const - MASK_MONEDA = ',0.## €;-,0.## €'; - MASK_NUMERO = '#,##0'; -var - AColumn : TcxGridDBColumn; -begin - AColumn := ViewControlGrid.GetColumnByCaption(AColumnCaption); - if APosition = spFooter then - begin - AColumn.Summary.FooterKind := AKind; - if (AKind in [skSum, skAverage]) and (AColumn.PropertiesClassName = 'TcxCurrencyEditProperties') then - AColumn.Summary.FooterFormat := MASK_MONEDA - else - AColumn.Summary.FooterFormat := MASK_NUMERO; - end - else begin - AColumn.Summary.GroupFooterKind := AKind; - if (AKind in [skSum, skAverage]) and (AColumn.PropertiesClassName = 'TcxCurrencyEditProperties') then - AColumn.Summary.GroupFooterFormat := MASK_MONEDA - else - AColumn.Summary.GroupFooterFormat := MASK_NUMERO; - end; -end; - -procedure TfrViewSumarios.RellenarTotalesPie; -var - i, j: Integer; - ASummary: TcxDataFooterSummaryItems; - AClase : TcxSummaryKind; - ACaption : String; - ACategory : TcxCategoryRow; - ARow : TcxEditorRow; -begin - vgSumarios.BeginUpdate; - try - ACategory := (vgSumarios.AddChild(nil, TcxCategoryRow) as TcxCategoryRow); - with ACategory.Properties do - begin - ASummary := ViewControlGrid.FocusedView.DataController.Summary.FooterSummaryItems; - ImageIndex := 0; - Caption := 'Resúmenes totales' - end; - - for i := 0 to ViewControlGrid.FocusedView.VisibleColumnCount - 1 do - begin - ACaption := ViewControlGrid.FocusedView.VisibleColumns[i].Caption; - AClase := ViewControlGrid.FocusedView.VisibleColumns[i].Summary.FooterKind; - ARow := AnadirSumario(ACaption, AClase); - ARow.Parent := ACategory; - end; - finally - vgSumarios.EndUpdate; - end; -end; - - -procedure TfrViewSumarios.RellenarCategoria( - const APosition: TcxSummaryPosition; const AGroupName: String); -begin - if APosition = spFooter then - RellenarTotalesPie - else - RellenarTotalesGrupo(AGroupName); -end; - -procedure TfrViewSumarios.RellenarCategorias; -var - i : Integer; -begin - vgSumarios.ClearRows; - RellenarCategoria(spFooter); - - // Recuperar las agrupaciones del grid - for i := 0 to ViewControlGrid.GroupedColumnCount - 1 do - begin - if i = 3 then - Break; // Sólo meter las 3 primera agrupaciones - RellenarCategoria(spGroup, ViewControlGrid.GroupedColumns[i].Caption); - end; -end; - -procedure TfrViewSumarios.vgSumariosEditorRowInitPopup(Sender: TObject); -var - AColumn: TcxGridDBColumn; - ARow : TcxEditorRow; -const - NumberFieldTypes = - [ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, - ftDateTime, ftAutoInc]; - TimeFieldTypes = [ftDate, ftTime, ftDateTime]; - -begin - inherited; - - ARow := TcxEditorRow(vgSumarios.FocusedRow); - AColumn := TcxGridDBColumn(ViewControlGrid.FocusedView.VisibleColumns[ARow.Index]); - - if Assigned(AColumn.DataBinding.Field) then - with TcxComboBoxProperties(TcxPopupEdit(Sender).Properties) do - begin - Items.Clear; - BeginUpdate; - try - Items.Add(SumaryKindStrArray[skNone]); - Items.Add(SumaryKindStrArray[skCount]); - - if AColumn.DataBinding.Field.DataType in NumberFieldTypes then - begin - Items.Add(SumaryKindStrArray[skMax]); - Items.Add(SumaryKindStrArray[skMin]); - if not (AColumn.DataBinding.Field.DataType in TimeFieldTypes) then - begin - Items.Add(SumaryKindStrArray[skSum]); - Items.Add(SumaryKindStrArray[skAverage]); - end; - end; - finally - EndUpdate; - end; - end; -end; - -procedure TfrViewSumarios.vgSumariosEditorRowEditValueChanged( - Sender: TObject); -var - AColumn : String; - ARow : TcxEditorRow; - AKind : TcxSummaryKind; - - function DarSummaryKind(AKind : String) : TcxSummaryKind; - var - i : TcxSummaryKind; - begin - if Length(AKind) = 0 then - Result := skNone - else - for i := skSum to skAverage do - if SumaryKindStrArray[i] = AKind then - begin - Result := i; - Break; - end; - end; - -begin - inherited; - - ARow := TcxEditorRow(vgSumarios.FocusedRow); - AColumn := ARow.Properties.Caption; - AKind := DarSummaryKind(VarToStr(ARow.Properties.Value)); - - if Assigned(ARow.Parent) then - begin - if(ARow.Parent.Index = 0) then - AplicarSumarioVista(spFooter, AColumn, AKind) - else - AplicarSumarioVista(spGroup, AColumn, AKind) - end; -end; - -procedure TfrViewSumarios.RellenarTotalesGrupo(const AGroupName: String); -var - i, j: Integer; - ASummary: TcxDataSummaryGroup; - AClase : TcxSummaryKind; - ACaption : String; - ACategory : TcxCategoryRow; - ARow : TcxEditorRow; - -begin - ASummary := ViewControlGrid.FocusedView.DataController.Summary.SummaryGroups.FindByItemLink(ViewControlGrid.GetColumnByCaption(AGroupName)); - - vgSumarios.BeginUpdate; - try - ACategory := (vgSumarios.AddChild(nil, TcxCategoryRow) as TcxCategoryRow); - with ACategory.Properties do - begin - ImageIndex := 1; - Caption := 'Totales de ' + AGroupName; - end; - - for i := 0 to ViewControlGrid.FocusedView.VisibleColumnCount - 1 do - begin - ACaption := ViewControlGrid.FocusedView.VisibleColumns[i].Caption; - AClase := ViewControlGrid.FocusedView.VisibleColumns[i].Summary.GroupFooterKind; - ARow := AnadirSumario(ACaption, AClase); - ARow.Parent := ACategory; - end; - finally - vgSumarios.EndUpdate; - end; -end; - -procedure TfrViewSumarios.Execute; -begin - inherited; - // -end; - -procedure TfrViewSumarios.SetModificable(const Value: Boolean); -begin - inherited; - vgSumarios.Enabled := Value; - if Value then - begin - vgSumarios.Styles.Category := cxStyleCategoria; - vgSumarios.Styles.Header := cxStyleNombreColumna; - vgSumarios.Styles.Content := nil; - end - else begin - vgSumarios.Styles.Category := cxStyleCategoriaInactivo; - vgSumarios.Styles.Header := cxStyleNombreColumnaInactivo; - vgSumarios.Styles.Content := cxStyleContentInactivo; - end; -end; - -end. - - diff --git a/Source/Modulos/Remesas de proveedor/Controller/uRemesasProveedorController.pas.bak b/Source/Modulos/Remesas de proveedor/Controller/uRemesasProveedorController.pas.bak deleted file mode 100644 index 7f1047ff..00000000 --- a/Source/Modulos/Remesas de proveedor/Controller/uRemesasProveedorController.pas.bak +++ /dev/null @@ -1,613 +0,0 @@ -unit uRemesasProveedorController; - -interface - - -uses - Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, - uIDataModuleRemesasProveedor, uBizRemesasProveedor, uProveedoresController, - uBizContactos, uRecibosProveedorController; - -type - IRemesasProveedorController = interface(IObservador) - ['{C14143FE-0806-4E64-93E2-A2C0170BBD41}'] - function Buscar(const ID: Integer): IBizRemesaProveedor; - function BuscarTodos: IBizRemesaProveedor; overload; - procedure Ver(ARemesaProveedor : IBizRemesaProveedor); - procedure VerTodos(ARemesasProveedor: IBizRemesaProveedor); - function Nuevo : IBizRemesaProveedor; - procedure Anadir(ARemesaProveedor : IBizRemesaProveedor); - function Eliminar(const ID : Integer): Boolean; overload; - function Eliminar(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false): Boolean; overload; - function Guardar(ARemesaProveedor : IBizRemesaProveedor): Boolean; - procedure DescartarCambios(ARemesaProveedor : IBizRemesaProveedor); - function Existe(const ID: Integer) : Boolean; - - procedure Preview(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false); - procedure Print(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false); - function EsModificable(ARemesaProveedor : IBizRemesaProveedor): Boolean; - function EsEliminable(ARemesaProveedor : IBizRemesaProveedor): Boolean; - - function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor): Boolean; - procedure EliminarReciboProveedor(ARemesaProveedor : IBizRemesaProveedor); - function GetRecibosProveedorController: IRecibosProveedorController; - property RecibosProveedorController: IRecibosProveedorController read GetRecibosProveedorController; - - procedure RecuperarRecibos(ARemesaProveedor: IBizRemesaProveedor); - function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor; Const ViewGrid: IViewGridBase = Nil) : IBizRemesaProveedor; - end; - - TRemesasProveedorController = class(TObservador, IRemesasProveedorController) - protected - FDataModule : IDataModuleRemesasProveedor; - FRecibosProveedorController: IRecibosProveedorController; - function GetRecibosProveedorController: IRecibosProveedorController; - - procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; - procedure AsignarID(ARemesaProveedor: IBizRemesaProveedor; const IDNuevo: Integer); virtual; - function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; - function _Vacio : IBizRemesaProveedor; - - procedure FiltrarEmpresa(ARemesaProveedor: IBizRemesaProveedor); - function ValidarRemesaProveedor(ARemesaProveedor: IBizRemesaProveedor): Boolean; virtual; - - procedure RecuperarRecibos(ARemesaProveedor: IBizRemesaProveedor); - procedure RecuperarObjetos(ARemesaProveedor: IBizRemesaProveedor); virtual; - procedure AsignarDataModule; virtual; - - public - property RecibosProveedorController: IRecibosProveedorController read GetRecibosProveedorController; - - constructor Create; virtual; - destructor Destroy; override; - - function Eliminar(const ID : Integer): Boolean; overload; - function Eliminar(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false): Boolean; overload; - function Guardar(ARemesaProveedor : IBizRemesaProveedor): Boolean; - procedure DescartarCambios(ARemesaProveedor : IBizRemesaProveedor); virtual; - function Existe(const ID: Integer) : Boolean; virtual; - procedure Anadir(ARemesaProveedor : IBizRemesaProveedor); virtual; - function Buscar(const ID: Integer): IBizRemesaProveedor; virtual; - function BuscarTodos: IBizRemesaProveedor; overload; - function Nuevo : IBizRemesaProveedor; virtual; - procedure Ver(ARemesaProveedor : IBizRemesaProveedor); virtual; - procedure VerTodos(ARemesasProveedor: IBizRemesaProveedor); virtual; - - procedure Preview(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false); virtual; - procedure Print(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false); virtual; - function EsModificable(ARemesaProveedor : IBizRemesaProveedor): Boolean; - function EsEliminable(ARemesaProveedor : IBizRemesaProveedor): Boolean; - - function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor; Const ViewGrid: IViewGridBase = Nil) : IBizRemesaProveedor; virtual; - function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor): Boolean; - procedure EliminarReciboProveedor(ARemesaProveedor : IBizRemesaProveedor); - end; - -implementation - -uses - cxControls, DB, uEditorRegistryUtils, schRemesasProveedorClient_Intf, - schRecibosProveedorClient_Intf, uIEditorRemesasProveedor, uIEditorRemesaProveedor, - Dialogs, uDataModuleRemesasProveedor, uDataModuleUsuarios, uDAInterfaces, - uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows, - uBizRecibosProveedor, Variants, uRemesasProveedorReportController; - -{ TRemesasProveedorController } - -procedure TRemesasProveedorController.Anadir(ARemesaProveedor: IBizRemesaProveedor); -begin - ARemesaProveedor.Insert; -end; - -procedure TRemesasProveedorController.EliminarReciboProveedor(ARemesaProveedor: IBizRemesaProveedor); -var - ARecibosRemesa : IBizRecibosProveedor; -begin - inherited; - ARecibosRemesa := ARemesaProveedor.Recibos; - RecibosProveedorController.QuitarRemesa(ARecibosRemesa); - //Quitamos el recibo de la remesa sin que el servidor se entere para que no elimine el recibo - DesconectarTabla(ARecibosRemesa.DataTable); - ARecibosRemesa.DataTable.Delete; - ConectarTabla(ARecibosRemesa.DataTable); - ARecibosRemesa := Nil; -end; - -function TRemesasProveedorController.EsEliminable(ARemesaProveedor: IBizRemesaProveedor): Boolean; -begin - Result := True; -end; - -function TRemesasProveedorController.EsModificable(ARemesaProveedor: IBizRemesaProveedor): Boolean; -begin - Result := True; -end; - -procedure TRemesasProveedorController.AsignarDataModule; -begin - FDataModule := TDataModuleRemesasProveedor.Create(Nil); - FRecibosProveedorController := TRecibosProveedorController.Create; -end; - -procedure TRemesasProveedorController.AsignarID(ARemesaProveedor: IBizRemesaProveedor; const IDNuevo: Integer); -begin - if not Assigned(ARemesaProveedor) then - raise Exception.Create ('RemesaProveedor no asignado'); - - ARemesaProveedor.Edit; - ARemesaProveedor.ID := IDNuevo; - ARemesaProveedor.Post; -end; - -function TRemesasProveedorController.Buscar(const ID: Integer): IBizRemesaProveedor; -begin - Result := (FDataModule as IDataModuleRemesasProveedor).GetItem(ID); - FiltrarEmpresa(Result); -end; - -function TRemesasProveedorController.BuscarTodos: IBizRemesaProveedor; -begin - Result := FDataModule.GetItems; - FiltrarEmpresa(Result); -end; - -constructor TRemesasProveedorController.Create; -begin - AsignarDataModule; -end; - -function TRemesasProveedorController.CreateEditor(const AName: String; - const IID: TGUID; out Intf): Boolean; -begin - Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); -end; - -procedure TRemesasProveedorController.DescartarCambios(ARemesaProveedor: IBizRemesaProveedor); -begin - if not Assigned(ARemesaProveedor) then - raise Exception.Create ('RemesaProveedor no asignado'); - - ShowHourglassCursor; - try - if (ARemesaProveedor.State in dsEditModes) then - ARemesaProveedor.Cancel; - - ARemesaProveedor.DataTable.CancelUpdates; - finally - HideHourglassCursor; - end; -end; - -destructor TRemesasProveedorController.Destroy; -begin - FDataModule := Nil; - FRecibosProveedorController := Nil; - inherited; -end; - -function TRemesasProveedorController.ValidarRemesaProveedor(ARemesaProveedor: IBizRemesaProveedor): Boolean; -begin - Result := False; - - if not Assigned(ARemesaProveedor) then - raise Exception.Create ('Remesa no asignada'); - - if (ARemesaProveedor.DataTable.State in dsEditModes) then - ARemesaProveedor.DataTable.Post; - - if ARemesaProveedor.DataTable.FieldByName(fld_RemesasProveedorFECHA_REMESA).IsNull then - raise Exception.Create('Debe indicar la fecha de esta remesa.'); - - if ARemesaProveedor.ID_DATOS_BANCO < 1 then - raise Exception.Create('Debe la cuenta bancaria sobre la que realizará la remesa.'); - - // Asegurarse de valores en campos "automáticos" - ARemesaProveedor.Edit; - try - ARemesaProveedor.USUARIO := dmUsuarios.LoginInfo.Usuario; - - Result := True; - finally - ARemesaProveedor.Post; - end; -end; - -procedure TRemesasProveedorController.Ver(ARemesaProveedor: IBizRemesaProveedor); -var - AEditor : IEditorRemesaProveedor; -begin - AEditor := NIL; - ShowHourglassCursor; - try - RecuperarObjetos(ARemesaProveedor); - - CreateEditor('EditorRemesaProveedor', IEditorRemesaProveedor, AEditor); - if Assigned(AEditor) then - with (AEditor as IEditorRemesaProveedor) do - begin - Controller := Self; //OJO ORDEN MUY IMPORTANTE - RemesaProveedor := ARemesaProveedor; - - //MODO CONSULTAR - if not EsModificable(ARemesaProveedor) then - begin - SetDataTableReadOnly(ARemesaProveedor.DataTable, True); - ReadOnly := True; - end; - - ShowModal; - - //MODO CONSULTAR (Se deja la tabla como estaba) - if ReadOnly then - SetDataTableReadOnly(ARemesaProveedor.DataTable, False); - - AEditor.Release; - end; - finally - AEditor := NIL; - HideHourglassCursor; - end; -end; - -procedure TRemesasProveedorController.VerTodos(ARemesasProveedor: IBizRemesaProveedor); -var - AEditor : IEditorRemesasProveedor; -begin - AEditor := NIL; - ShowHourglassCursor; - try - CreateEditor('EditorRemesasProveedor', IEditorRemesasProveedor, AEditor); - if Assigned(AEditor) then - with (AEditor as IEditorRemesasProveedor) do - begin - Controller := Self; //OJO ORDEN MUY IMPORTANTE - RemesasProveedor := ARemesasProveedor; - MultiSelect := True; - ShowEmbedded; - end; - finally - AEditor := Nil; - HideHourglassCursor; - end; -end; - -function TRemesasProveedorController._Vacio: IBizRemesaProveedor; -begin - Result := Buscar(ID_NULO); -end; - -function TRemesasProveedorController.Eliminar(const ID: Integer): Boolean; -var - ARemesaProveedor : IBizRemesaProveedor; -begin - ARemesaProveedor := Buscar(ID); - - if not Assigned(ARemesaProveedor) then - raise Exception.Create(Format('No se ha encontrado la remesa con ID = %d', [ID])); - - Result := Eliminar(ARemesaProveedor); - ARemesaProveedor := NIL; -end; - -function TRemesasProveedorController.ElegirRecibosProveedor(ARemesaProveedor: IBizRemesaProveedor): Boolean; -var - ARecibosRemesa : IBizRecibosProveedor; - ARecibosSeleccionados : IBizRecibosProveedor; -begin - Result := False; - - ARecibosSeleccionados := (FRecibosProveedorController.ElegirRecibos(FRecibosProveedorController.BuscarRecibosARemesar, 'Elija uno o más recibos para incluirlos en esta remesa', True) as IBizRecibosProveedor); - if Assigned(ARecibosSeleccionados) then - begin - ShowHourglassCursor; - try - ARecibosRemesa := ARemesaProveedor.Recibos; - //Copia los recibos seleccionados a los recibos de la remesa sin que el servidor se entere de - //las inserciones - DuplicarRegistros(ARecibosSeleccionados.DataTable,ARecibosRemesa.DataTable, mdrTodos, False, False, True); - FRecibosProveedorController.SetSituacionCobrados(ARecibosRemesa); - Result := True; - finally - HideHourglassCursor; - end; - end; - - ARecibosRemesa := Nil; - ARecibosSeleccionados := Nil; -end; - -function TRemesasProveedorController.Eliminar(ARemesaProveedor: IBizRemesaProveedor; AllItems: Boolean = false): Boolean; -//En el caso de eliminar almenos un elemento del conjunto se devuelve true -var - bEliminado: Boolean; - -begin - bEliminado := False; - - if not Assigned(ARemesaProveedor) then - raise Exception.Create ('ARemesaProveedor no asignada'); - - ShowHourglassCursor; - try - if not ARemesaProveedor.DataTable.Active then - ARemesaProveedor.DataTable.Active := True; - - if (ARemesaProveedor.State in dsEditModes) then - ARemesaProveedor.Cancel; - - //Siempre eliminaremos el seleccionado - if EsEliminable(ARemesaProveedor) then - begin - //Si la llamada a eliminar es por el editor RemesasProveedor, debo recuperar los recibos - //de la remesa a eliminar, en caso de venir por el editor RemesaProveedor ya los tengo - if not Assigned(ARemesaProveedor.Recibos) then - RecuperarRecibos(ARemesaProveedor); - //Eliminaremos la remesa de los recibos asociados - With ARemesaProveedor.Recibos.DataTable do - begin - First; - While not Eof do - begin - RecibosProveedorController.QuitarRemesa(ARemesaProveedor.Recibos); - Next; - end; - end; - - //Como no están declarados como maestro-detalles debemos hacer el applyupdates nosotros - ARemesaProveedor.Recibos.DataTable.ApplyUpdates; - - ARemesaProveedor.Delete; - bEliminado := True; - end; - - //En el caso de querer eliminar todos los items del objeto AAlbaran - if AllItems then - begin - with ARemesaProveedor.DataTable do - begin - First; - while not EOF do - begin - if EsEliminable(ARemesaProveedor) then - begin - //Si la llamada a eliminar es por el editor RemesasProveedor, debo recuperar los recibos - //de la remesa a eliminar, en caso de venir por el editor RemesaProveedor ya los tengo - if not Assigned(ARemesaProveedor.Recibos) then - RecuperarRecibos(ARemesaProveedor); - //Eliminaremos la remesa de los recibos asociados - With ARemesaProveedor.Recibos.DataTable do - begin - First; - While not Eof do - begin - RecibosProveedorController.QuitarRemesa(ARemesaProveedor.Recibos); - Next; - end; - end; - - //Como no están declarados como maestro-detalles debemos hacer el applyupdates nosotros - ARemesaProveedor.Recibos.DataTable.ApplyUpdates; - - ARemesaProveedor.Delete; - bEliminado := True - end - else Next; - end; - end; - end; - - if bEliminado then - begin - ARemesaProveedor.DataTable.ApplyUpdates; - Result := True; - end - else - Result := False; - - HideHourglassCursor; - except - //Hay algun recibo de la remesa que tiene movimientos (Cobros/Devoluciones) posteriores al cobro inicial de la remesa - on E: Exception do - begin - ARemesaProveedor.Recibos.DataTable.CancelUpdates; - ARemesaProveedor.DataTable.CancelUpdates; - HideHourglassCursor; - MessageBox(0, 'Exiten movimientos (Cobros/Devoluciones) en los recibos posteriores al cobro inicial de la remesa', 'Atención', MB_ICONWARNING or MB_OK); - end; - end; -end; - -procedure TRemesasProveedorController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); -begin - inherited; -// -end; - -procedure TRemesasProveedorController.RecuperarObjetos(ARemesaProveedor: IBizRemesaProveedor); -begin - RecuperarRecibos(ARemesaProveedor); -end; - -procedure TRemesasProveedorController.RecuperarRecibos(ARemesaProveedor: IBizRemesaProveedor); -begin - ARemesaProveedor.Recibos := RecibosProveedorController.BuscarRecibosRemesa(ARemesaProveedor.ID); -end; - -function TRemesasProveedorController.Existe(const ID: Integer): Boolean; -var - ARemesaProveedor : IBizRemesaProveedor; -begin - try - ARemesaProveedor := Buscar(ID); - Result := Assigned(ARemesaProveedor) and (ARemesaProveedor.ID = ID); - finally - ARemesaProveedor := NIL; - end; -end; - -function TRemesasProveedorController.ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor; Const ViewGrid: IViewGridBase = Nil): IBizRemesaProveedor; -var - ASeleccionados : IBizRemesaProveedor; -begin - if Assigned(ViewGrid) then - begin - //Guardamos la situación porque el CopyDataTable nos cambia la posicion - ViewGrid.SaveGridStatus; - ViewGrid.DesactivarGrid; - end; - - ASeleccionados := (Self.Buscar(ID_NULO) as IBizRemesaProveedor); - CopyDataTable(ARemesasProveedor.DataTable, ASeleccionados.DataTable, True); - Result := ASeleccionados; - - if Assigned(ViewGrid) then - begin - ViewGrid.ActivarGrid; - ViewGrid.RestoreGridStatus; - end; -end; - -procedure TRemesasProveedorController.FiltrarEmpresa(ARemesaProveedor: IBizRemesaProveedor); -begin - if ARemesaProveedor.DataTable.Active then - ARemesaProveedor.DataTable.Active := False; - - // Filtrar los contactos actuales por empresa - with ARemesaProveedor.DataTable.Where do - begin - if NotEmpty then - AddOperator(opAND); - // Para evitar ambigüedades en la SQL del servidor - AddText(fld_RemesasProveedorID_EMPRESA + ' = ' + IntToStr(dmUsuarios.IDEmpresaActual)); -// AddCondition('##' + fld_RemesasProveedorID_EMPRESA, cEqual, dmUsuarios.IDEmpresaActual); - end; -end; - -function TRemesasProveedorController.GetRecibosProveedorController: IRecibosProveedorController; -begin - Result := FRecibosProveedorController; -end; - -function TRemesasProveedorController.Guardar(ARemesaProveedor: IBizRemesaProveedor): Boolean; -var - NuevoID: Integer; - bEsNuevo: Boolean; -begin - Result := False; - - if ValidarRemesaProveedor(ARemesaProveedor) then - begin - ShowHourglassCursor; - try - bEsNuevo := ARemesaProveedor.EsNuevo; - if (bEsNuevo) then - NuevoID := FDataModule.GetNextID(ARemesaProveedor.DataTable.LogicalName) - else - NuevoID := ARemesaProveedor.ID; - - AsignarID(ARemesaProveedor, NuevoID); - //Si es nuevo debemos hacer el applyupdates por la integridad referencial de BD - if bEsNuevo then - ARemesaProveedor.DataTable.ApplyUpdates; - - //Si todo ha ido bien, asignamos la remesa a los recibos asociados - //Como no están declarados como maestro-detalles debemos hacer el applyupdates nosotros - RecibosProveedorController.AsignarRemesa(ARemesaProveedor.Recibos, NuevoID); - ARemesaProveedor.Recibos.DataTable.ApplyUpdates; //En este applyupdates tambien se realizarán todos los cambios acumulados sobre los recibos asociados (EliminarReciboProveedor/ ElegirRecibosProveedor) - - //Es necesario ya que no se refrescan bien los deltas y despues del applyupdates siguen - //existiendo deltas, de esta forma los limpiamos - if ARemesaProveedor.Recibos.DataTable.HasDelta then - ARemesaProveedor.Recibos.DataTable.Refresh; - - ARemesaProveedor.DataTable.ApplyUpdates; - - Result := True; - finally - HideHourglassCursor; - end; - end; -end; - -function TRemesasProveedorController.Nuevo: IBizRemesaProveedor; -var - ARemesaProveedor : IBizRemesaProveedor; -begin - ARemesaProveedor := FDataModule.NewItem; - FiltrarEmpresa(ARemesaProveedor); - ARemesaProveedor.DataTable.Active := True; - ARemesaProveedor.Insert; - Result := ARemesaProveedor; -end; - -procedure TRemesasProveedorController.Preview(ARemesaProveedor: IBizRemesaProveedor; AllItems: Boolean = false); -var - AReportController : IRemesasProveedorReportController; - ID_Remesas: TStringList; - -begin - AReportController := TRemesasProveedorReportController.Create; - try - ID_Remesas := TStringList.Create; - - //Si deseamos previsualizar todos los items del objeto albaran - if AllItems then - begin - with ARemesaProveedor.DataTable do - begin - First; - while not EOF do - begin - ID_Remesas.Add(IntToStr(ARemesaProveedor.ID)); - Next; - end; - end; - end - //Solo previsualizamos el item seleccionado - else - ID_Remesas.Add(IntToStr(ARemesaProveedor.ID)); - - AReportController.Preview(ID_Remesas.CommaText); - - finally - AReportController := NIL; - ID_Remesas.Free; - end; -end; - -procedure TRemesasProveedorController.Print(ARemesaProveedor: IBizRemesaProveedor; AllItems: Boolean = false); -var - AReportController : IRemesasProveedorReportController; - ID_Remesas: TStringList; - -begin - AReportController := TRemesasProveedorReportController.Create; - try - ID_Remesas := TStringList.Create; - - //Si deseamos previsualizar todos los items del objeto albaran - if AllItems then - begin - with ARemesaProveedor.DataTable do - begin - First; - while not EOF do - begin - ID_Remesas.Add(IntToStr(ARemesaProveedor.ID)); - Next; - end; - end; - end - //Solo previsualizamos el item seleccionado - else - ID_Remesas.Add(IntToStr(ARemesaProveedor.ID)); - - AReportController.Print(ID_Remesas.CommaText); - - finally - AReportController := NIL; - ID_Remesas.Free; - end; -end; - -end.