From d1b762cddf564509bf4554cb3ec462ad0c57aa9b Mon Sep 17 00:00:00 2001 From: david Date: Mon, 19 Jan 2009 08:48:54 +0000 Subject: [PATCH] Albaranes de proveedor: poder imprimirlos y exportarlos a Word. git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@851 0c75b7a4-871f-7646-8a2f-f78d34cc349f --- Source/Base/Base.dproj | 102 +- Source/Base/Base.res | Bin 4748 -> 384 bytes Source/Cliente/FactuGES.dproj | 2 +- Source/Cliente/FactuGES.rc | 8 +- Source/Cliente/FactuGES.res | Bin 171984 -> 171984 bytes Source/Informes/1/AlbaranProveedor.rdx | Bin 0 -> 71680 bytes Source/Informes/1/InfAlbaranProveedor.fr3 | 49 + Source/Informes/2/AlbaranProveedor.rdx | Bin 61952 -> 58880 bytes Source/Informes/2/InfAlbaranProveedor.fr3 | 59 + Source/Informes/2/InfPedidoProveedor.fr3 | 12 +- .../uAlbaranesProveedorController.pas | 56 +- .../uAlbaranesProveedorReportController.pas | 94 +- .../Data/uDataModuleAlbaranesProveedor.pas | 38 +- .../uIDataModuleAlbaranesProveedorReport.pas | 10 +- .../Reports/uRptAlbaranesProveedor_Server.dfm | 1114 +++++++++-------- .../Reports/uRptAlbaranesProveedor_Server.pas | 108 +- .../Reports/uRptWordAlbaranProveedor.dfm | 547 ++++++++ .../Reports/uRptWordAlbaranProveedor.pas | 268 ++++ .../Servidor/srvAlbaranesProveedor_Impl.pas | 56 +- .../Views/uEditorAlbaranDevProveedor.dfm | 74 +- .../Views/uEditorAlbaranProveedor.dfm | 38 +- .../Views/uEditorAlbaranProveedor.pas | 16 +- .../Views/uEditorAlbaranesProveedor.dfm | 1 - .../Views/uEditorAlbaranesProveedor.pas | 17 +- .../Views/uEditorAlbaranesProveedorReport.dfm | 14 +- .../Views/uEditorAlbaranesProveedorReport.pas | 24 +- Source/Servicios/FactuGES.RODL | 24 + Source/Servicios/FactuGES_Intf.pas | 59 + Source/Servicios/FactuGES_Invk.pas | 93 ++ Source/Servicios/RODLFILE.res | Bin 40510 -> 41332 bytes Source/Servidor/FactuGES_Server.RES | Bin 23204 -> 23204 bytes Source/Servidor/FactuGES_Server.dpr | 4 +- Source/Servidor/FactuGES_Server.dproj | 646 +++++----- Source/Servidor/FactuGES_Server.rc | 10 +- 34 files changed, 2484 insertions(+), 1059 deletions(-) create mode 100644 Source/Informes/1/AlbaranProveedor.rdx create mode 100644 Source/Informes/1/InfAlbaranProveedor.fr3 create mode 100644 Source/Informes/2/InfAlbaranProveedor.fr3 create mode 100644 Source/Modulos/Albaranes de proveedor/Reports/uRptWordAlbaranProveedor.dfm create mode 100644 Source/Modulos/Albaranes de proveedor/Reports/uRptWordAlbaranProveedor.pas diff --git a/Source/Base/Base.dproj b/Source/Base/Base.dproj index d03ddc0b..fff1d726 100644 --- a/Source/Base/Base.dproj +++ b/Source/Base/Base.dproj @@ -54,57 +54,57 @@ MainSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fConfigurarConexion
diff --git a/Source/Base/Base.res b/Source/Base/Base.res index 1641339fcc482e7e3492d1b45813a86619622c33..8b251f312bcccec5485024f6fe8d80e1cdf25746 100644 GIT binary patch delta 11 ScmeBCZD5|Duvteife`=|>;pCc 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 diff --git a/Source/Cliente/FactuGES.dproj b/Source/Cliente/FactuGES.dproj index 9fdada02..64fd6665 100644 --- a/Source/Cliente/FactuGES.dproj +++ b/Source/Cliente/FactuGES.dproj @@ -54,7 +54,7 @@ Delphi.Personality VCLApplication -FalseTrueFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse1630FalseFalseFalseFalseFalse30821252Rodax Software S.L.1.6.3.0FactuGESFactuGES1.6.3.0 +FalseTrueFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse1640FalseFalseFalseFalseFalse30821252Rodax Software S.L.1.6.4.0FactuGESFactuGES1.6.4.0 diff --git a/Source/Cliente/FactuGES.rc b/Source/Cliente/FactuGES.rc index 713abe9f..17f14d03 100644 --- a/Source/Cliente/FactuGES.rc +++ b/Source/Cliente/FactuGES.rc @@ -1,7 +1,7 @@ MAINICON ICON "C:\Codigo Tecsitel\Resources\Iconos\Factuges.ico" 1 VERSIONINFO -FILEVERSION 1,6,3,0 -PRODUCTVERSION 1,6,3,0 +FILEVERSION 1,6,4,0 +PRODUCTVERSION 1,6,4,0 FILEFLAGSMASK 0x3FL FILEFLAGS 0x00L FILEOS 0x40004L @@ -13,10 +13,10 @@ BEGIN BLOCK "0C0A04E4" BEGIN VALUE "CompanyName", "Rodax Software S.L.\0" - VALUE "FileVersion", "1.6.3.0\0" + VALUE "FileVersion", "1.6.4.0\0" VALUE "InternalName", "FactuGES\0" VALUE "ProductName", "FactuGES\0" - VALUE "ProductVersion", "1.6.3.0\0" + VALUE "ProductVersion", "1.6.4.0\0" END END BLOCK "VarFileInfo" diff --git a/Source/Cliente/FactuGES.res b/Source/Cliente/FactuGES.res index 9d84751a327247d0f9398e929591d405e07bbdcd..979bb07913f2252fcae51de33842b018487811f3 100644 GIT binary patch delta 42 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 L$#3_6vjzSa7fH0k literal 0 HcmV?d00001 diff --git a/Source/Informes/1/InfAlbaranProveedor.fr3 b/Source/Informes/1/InfAlbaranProveedor.fr3 new file mode 100644 index 00000000..97fa71d4 --- /dev/null +++ b/Source/Informes/1/InfAlbaranProveedor.fr3 @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/2/AlbaranProveedor.rdx b/Source/Informes/2/AlbaranProveedor.rdx index 84a2a3652f01449cdc2e61dbb44ce6575b7a628f..54f817c0ca2e6809e83ea6fc6cf604282aa6acf9 100644 GIT binary patch literal 58880 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 OfJXXX=Ks$U_`d)+ literal 61952 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/2/InfPedidoProveedor.fr3 b/Source/Informes/2/InfPedidoProveedor.fr3 index ba577963..ea52ddc1 100644 --- a/Source/Informes/2/InfPedidoProveedor.fr3 +++ b/Source/Informes/2/InfPedidoProveedor.fr3 @@ -1,5 +1,5 @@ - + @@ -10,15 +10,15 @@ - - + + - + - - + + diff --git a/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas b/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas index e772b6eb..69ddfa16 100644 --- a/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas +++ b/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas @@ -144,7 +144,7 @@ uses uIEditorElegirAlbaranesProveedor, uIEditorDireccionEntregaAlbaranProveedor, schContactosClient_Intf, Forms, schPedidosProveedorClient_Intf, uFactuGES_App, uBizPedidosProveedor, uPedidosProveedorController, - schInventarioClient_Intf, uStringsUtils, + schInventarioClient_Intf, uStringsUtils, uIntegerListUtils, uArticulosController, uBizArticulos, uControllerDetallesBase, Classes, schArticulosClient_Intf, uControllerDetallesArticulos, Variants, uDialogUtils, uIEditorAlbaranDevProveedor, uAlbaranesProveedorReportController; @@ -1029,72 +1029,66 @@ end; procedure TAlbaranesProveedorController.Preview(AAlbaran: IBizAlbaranProveedor; AllItems: Boolean = false); var AReportController : IAlbaranesProveedorReportController; - ID_Albaranes: TStringList; - + ID_Albaranes: TIntegerList; begin AReportController := TAlbaranesProveedorReportController.Create; - ID_Albaranes := TStringList.Create; + ID_Albaranes := TIntegerList.Create; try - - //Si deseamos previsualizar todos los items del objeto albaran - if AllItems then - begin + //Si deseamos previsualizar todos los items del objeto albaran + if AllItems then + begin with AAlbaran.DataTable do begin First; while not EOF do begin - ID_Albaranes.Add(IntToStr(AAlbaran.ID)); + ID_Albaranes.Add(AAlbaran.ID); Next; end; end; - end - //Solo previsualizamos el item seleccionado - else - ID_Albaranes.Add(IntToStr(AAlbaran.ID)); - - AReportController.Preview(ID_Albaranes.CommaText); + end + //Solo previsualizamos el item seleccionado + else + ID_Albaranes.Add(AAlbaran.ID); + AReportController.Preview(ID_Albaranes); finally AReportController := NIL; - ID_Albaranes.Free; + FreeANDNIL(ID_Albaranes) end; end; procedure TAlbaranesProveedorController.Print(AAlbaran: IBizAlbaranProveedor; AllItems: Boolean = false); var AReportController : IAlbaranesProveedorReportController; - ID_Albaranes: TStringList; - + ID_Albaranes: TIntegerList; begin AReportController := TAlbaranesProveedorReportController.Create; - ID_Albaranes := TStringList.Create; + ID_Albaranes := TIntegerList.Create; try - - //Si deseamos previsualizar todos los items del objeto albaran - if AllItems then - begin + //Si deseamos previsualizar todos los items del objeto albaran + if AllItems then + begin with AAlbaran.DataTable do begin First; while not EOF do begin - ID_Albaranes.Add(IntToStr(AAlbaran.ID)); + ID_Albaranes.Add(AAlbaran.ID); Next; end; end; - end - //Solo previsualizamos el item seleccionado - else - ID_Albaranes.Add(IntToStr(AAlbaran.ID)); - - AReportController.Print(ID_Albaranes.CommaText); + end + //Solo previsualizamos el item seleccionado + else + ID_Albaranes.Add(AAlbaran.ID); + AReportController.Print(ID_Albaranes); finally AReportController := NIL; - ID_Albaranes.Free; + FreeANDNIL(ID_Albaranes) end; end; diff --git a/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorReportController.pas b/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorReportController.pas index 2890efff..0605b150 100644 --- a/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorReportController.pas +++ b/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorReportController.pas @@ -5,13 +5,15 @@ interface uses Classes, SysUtils, uDADataTable, uControllerBase, uIDataModuleAlbaranesProveedorReport, uAlbaranesProveedorController, uDetallesAlbaranProveedorController, - uBizAlbaranesProveedor; + uBizAlbaranesProveedor, uIntegerListUtils; type IAlbaranesProveedorReportController = interface(IControllerBase) - ['{AAE252CE-D407-4FF4-AF2A-350C5A421C89}'] - procedure Preview(const AID : String); - procedure Print(const AID : String); + ['{11F9D087-C6BE-4401-AB13-4342025D62BB}'] + procedure Preview(const AListaID : TIntegerList); + procedure Print(const AListaID : TIntegerList); + function ExportToWord(const AID: Integer; const AFileName : String = ''): Boolean; + function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean; end; TAlbaranesProveedorReportController = class(TControllerBase, IAlbaranesProveedorReportController) @@ -22,8 +24,10 @@ type constructor Create; override; destructor Destroy; override; - procedure Preview(const AID : String); - procedure Print(const AID : String); + procedure Preview(const AListaID : TIntegerList); + procedure Print(const AListaID : TIntegerList); + function ExportToWord(const AID: Integer; const AFileName : String = ''): Boolean; + function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean; end; @@ -31,7 +35,8 @@ implementation uses uROTypes, uEditorRegistryUtils, uIEditorAlbaranesProveedorPreview, - uEditorPreview, uDataModuleAlbaranesProveedor, uEditorBase, cxControls; + uEditorPreview, uDataModuleAlbaranesProveedor, uEditorBase, cxControls, + uStringsUtils, uSistemaFunc, uFactuGES_App; { TAlbaranesProveedorReportController } @@ -54,46 +59,109 @@ begin inherited; end; -procedure TAlbaranesProveedorReportController.Preview(const AID : String); +function TAlbaranesProveedorReportController.ExportToPDF(const AID: Integer; + const AFileName: String): Boolean; +var + AStream: Binary; +begin + Result := False; + if EsCadenaVacia(AFileName) then + Exit; + + ShowHourglassCursor; + try + AStream := FDataModule.GetRptPDFAlbaran(AID); + try + AStream.SaveToFile(AFileName); + Result := True; + finally + FreeAndNil(AStream); + end; + finally + HideHourglassCursor; + end; +end; + +function TAlbaranesProveedorReportController.ExportToWord(const AID: Integer; + const AFileName: String): Boolean; +var + AStream: Binary; + AFile : String; +begin + Result := False; + AFile := AFileName; + + if EsCadenaVacia(AFile) and (not PreguntarFicheroWordExportar(AFile)) then + Exit; + + ShowHourglassCursor; + try + AStream := FDataModule.GetRptWordAlbaran(AID); + try + AStream.SaveToFile(AFile); + Result := True; + finally + FreeAndNil(AStream); + end; + finally + HideHourglassCursor; + end; +end; + +procedure TAlbaranesProveedorReportController.Preview( + const AListaID: TIntegerList); var AStream: Binary; AEditor : IEditorAlbaranesProveedorPreview; begin AEditor := NIL; - AStream := FDataModule.GetReport(AID); + + AStream := FDataModule.GetReport(AListaID); try CreateEditor('EditorAlbaranesProveedorPreview', IEditorAlbaranesProveedorPreview, AEditor); if Assigned(AEditor) then + begin try + AEditor.Controller := Self; + AEditor.ListaID := AListaID; + AEditor.Title := 'Albarán de proveedor - ' + AppFactuGES.EmpresaActiva.NOMBRE; AEditor.LoadFromStream(AStream); AEditor.Preview; finally AEditor.Release; + AEditor := Nil; end; + end; finally - FreeAndNil(AStream); - AEditor := Nil; + FreeANDNil(AStream) end; end; -procedure TAlbaranesProveedorReportController.Print(const AID : String); +procedure TAlbaranesProveedorReportController.Print( + const AListaID: TIntegerList); var AStream: Binary; AEditor : IEditorAlbaranesProveedorPreview; begin AEditor := NIL; + ShowHourglassCursor; try - AStream := FDataModule.GetReport(AID); + AStream := FDataModule.GetReport(AListaID); try CreateEditor('EditorAlbaranesProveedorPreview', IEditorAlbaranesProveedorPreview, AEditor); if Assigned(AEditor) then + begin try + AEditor.Controller := Self; + AEditor.ListaID := AListaID; + AEditor.Title := 'Albarán de proveedor - ' + AppFactuGES.EmpresaActiva.NOMBRE; AEditor.LoadFromStream(AStream); AEditor.Print; finally AEditor.Release; end; + end; finally FreeAndNil(AStream); AEditor := Nil; diff --git a/Source/Modulos/Albaranes de proveedor/Data/uDataModuleAlbaranesProveedor.pas b/Source/Modulos/Albaranes de proveedor/Data/uDataModuleAlbaranesProveedor.pas index d806c9ac..6882e39f 100644 --- a/Source/Modulos/Albaranes de proveedor/Data/uDataModuleAlbaranesProveedor.pas +++ b/Source/Modulos/Albaranes de proveedor/Data/uDataModuleAlbaranesProveedor.pas @@ -9,7 +9,7 @@ uses uROTypes, uIDataModuleAlbaranesProveedorReport, uDataModuleBase, uIDataModuleAlbaranesProveedor, uBizAlbaranesProveedor, uBizDetallesAlbaranProveedor, uDARemoteDataAdapter, uDADataStreamer, uDABin2DataStreamer, uDAInterfaces, - uDAMemDataTable; + uDAMemDataTable, uIntegerListUtils; type TDataModuleAlbaranesProveedor = class(TDataModuleBase, IDataModuleAlbaranesProveedor, IDataModuleAlbaranesProveedorReport) @@ -34,7 +34,9 @@ type function NewItem : IBizAlbaranProveedor; // Report - function GetReport(const AID: String): Binary; + function GetReport(const ListaID: TIntegerList): Binary; + function GetRptWordAlbaran(const AID: Integer): Binary; + function GetRptPDFAlbaran(const AID: Integer): Binary; end; implementation @@ -58,9 +60,37 @@ begin RORemoteService.Message := dmConexion.Message; end; -function TDataModuleAlbaranesProveedor.GetReport(const AID: String): Binary; +function TDataModuleAlbaranesProveedor.GetReport( + const ListaID: TIntegerList): Binary; +var + AParam : TIntegerArray; begin -// Result := (RORemoteService as IsrvAlbaranesProveedor).GenerateReport(AID) + AParam := ListaID.ToIntegerArray; + try + Result := (RORemoteService as IsrvAlbaranesProveedor).GenerarInforme(AParam); + finally + FreeANDNil(AParam); + end; +end; + +function TDataModuleAlbaranesProveedor.GetRptPDFAlbaran( + const AID: Integer): Binary; +var + AParam : TIntegerArray; +begin + AParam := TIntegerArray.Create; + try + AParam.Add(AID); + Result := (RORemoteService as IsrvAlbaranesProveedor).GenerarInformeEnPDF(AParam); + finally + FreeANDNil(AParam); + end; +end; + +function TDataModuleAlbaranesProveedor.GetRptWordAlbaran( + const AID: Integer): Binary; +begin + Result := (RORemoteService as IsrvAlbaranesProveedor).GenerarInformeEnWord(AID); end; function TDataModuleAlbaranesProveedor.NewItem: IBizAlbaranProveedor; diff --git a/Source/Modulos/Albaranes de proveedor/Model/Data/uIDataModuleAlbaranesProveedorReport.pas b/Source/Modulos/Albaranes de proveedor/Model/Data/uIDataModuleAlbaranesProveedorReport.pas index 9095d6ff..7bbf271a 100644 --- a/Source/Modulos/Albaranes de proveedor/Model/Data/uIDataModuleAlbaranesProveedorReport.pas +++ b/Source/Modulos/Albaranes de proveedor/Model/Data/uIDataModuleAlbaranesProveedorReport.pas @@ -3,14 +3,18 @@ unit uIDataModuleAlbaranesProveedorReport; interface uses - uROTypes; + uROTypes, uIntegerListUtils; type IDataModuleAlbaranesProveedorReport = interface - ['{AF3C54C4-A892-46FD-9689-081A637DE321}'] - function GetReport(const AID: String): Binary; + ['{FC37B698-7FBF-4658-BBD0-CBD4F6891CDF}'] + function GetReport(const ListaID: TIntegerList): Binary; + function GetRptWordAlbaran(const AID: Integer): Binary; + function GetRptPDFAlbaran(const AID: Integer): Binary; end; implementation end. + + diff --git a/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.dfm b/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.dfm index 37e9c404..e385896f 100644 --- a/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.dfm +++ b/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.dfm @@ -1,117 +1,214 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor OldCreateOrder = True OnCreate = DataModuleCreate - Height = 405 - Width = 447 - object DADataCabecera: TDADataSource + Height = 471 + Width = 448 + object DADSCabecera: TDADataSource DataSet = tbl_Cabecera.Dataset DataTable = tbl_Cabecera Left = 264 Top = 72 end - object DADataDetalles: TDADataSource + object DADSDetalles: TDADataSource DataSet = tbl_Detalles.Dataset DataTable = tbl_Detalles Left = 344 Top = 72 end - object tbl_Cabecera: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = <> - Params = <> - MasterMappingMode = mmDataRequest - LogChanges = False - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - IndexDefs = <> - Left = 264 - Top = 128 - end - object tbl_Detalles: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = <> - Params = <> - MasterMappingMode = mmDataRequest - LogChanges = False - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - IndexDefs = <> - Left = 344 - Top = 128 - end - object DABINAdapter: TDABINAdapter - Left = 48 - Top = 80 - end object frxRichObject1: TfrxRichObject - Left = 48 - Top = 296 + Left = 280 + Top = 360 end object frxBarCodeObject1: TfrxBarCodeObject - Left = 144 - Top = 296 + Left = 344 + Top = 360 end object frxOLEObject1: TfrxOLEObject - Left = 48 - Top = 344 + Left = 280 + Top = 408 end object frxCrossObject1: TfrxCrossObject - Left = 144 - Top = 344 + Left = 344 + Top = 408 end object frxCheckBoxObject1: TfrxCheckBoxObject - Left = 256 - Top = 296 + Left = 280 + Top = 256 end object frxGradientObject1: TfrxGradientObject - Left = 360 - Top = 296 + Left = 344 + Top = 256 end object frxChartObject1: TfrxChartObject - Left = 256 - Top = 344 + Left = 280 + Top = 304 end object schReport: TDASchema ConnectionManager = dmServer.ConnectionManager - DataDictionary = DataDictionary Datasets = < + item + Params = <> + Statements = < + item + Connection = 'IBX' + ConnectionType = 'Interbase' + Default = True + Name = 'IBX' + SQL = + 'select ID_EMPRESA,'#10'extract (year from FECHA_ALBARAN) as ANO,'#10'ext' + + 'ract (month from FECHA_ALBARAN) as MES,'#10'case'#10'when extract (month' + + ' from FECHA_ALBARAN) = 1 then '#39'ENERO - '#39' || extract (year from F' + + 'ECHA_ALBARAN)'#10'when extract (month from FECHA_ALBARAN) = 2 then '#39 + + 'FEBRERO - '#39' || extract (year from FECHA_ALBARAN)'#10'when extract (m' + + 'onth from FECHA_ALBARAN) = 3 then '#39'MARZO - '#39' || extract (year fr' + + 'om FECHA_ALBARAN)'#10'when extract (month from FECHA_ALBARAN) = 4 th' + + 'en '#39'ABRIL - '#39' || extract (year from FECHA_ALBARAN)'#10'when extract ' + + '(month from FECHA_ALBARAN) = 5 then '#39'MAYO - '#39' || extract (year f' + + 'rom FECHA_ALBARAN)'#10'when extract (month from FECHA_ALBARAN) = 6 t' + + 'hen '#39'JUNIO - '#39' || extract (year from FECHA_ALBARAN)'#10'when extract' + + ' (month from FECHA_ALBARAN) = 7 then '#39'JULIO - '#39' || extract (year' + + ' from FECHA_ALBARAN)'#10'when extract (month from FECHA_ALBARAN) = 8' + + ' then '#39'AGOSTO - '#39' || extract (year from FECHA_ALBARAN)'#10'when extr' + + 'act (month from FECHA_ALBARAN) = 9 then '#39'SEPTIEMBRE - '#39' || extra' + + 'ct (year from FECHA_ALBARAN)'#10'when extract (month from FECHA_ALBA' + + 'RAN) = 10 then '#39'OCTUBRE - '#39' || extract (year from FECHA_ALBARAN)' + + #10'when extract (month from FECHA_ALBARAN) = 11 then '#39'NOVIEMBRE - ' + + #39' || extract (year from FECHA_ALBARAN)'#10'when extract (month from ' + + 'FECHA_ALBARAN) = 12 then '#39'DICIEMBRE - '#39' || extract (year from FE' + + 'CHA_ALBARAN)'#10'end as TITULO,'#10'REFERENCIA, ID_PROVEEDOR, NOMBRE, F' + + 'ECHA_ALBARAN, IMPORTE_TOTAL'#10'from V_ALBARANES_PROVEEDOR'#10'where {wh' + + 'ere}'#10'order by ANO, MES, NOMBRE'#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ID_EMPRESA' + TableField = 'ID_EMPRESA' + end + item + DatasetField = 'ANO' + TableField = 'ANO' + end + item + DatasetField = 'MES' + TableField = 'MES' + end + item + DatasetField = 'TITULO' + TableField = 'TITULO' + end + item + DatasetField = 'REFERENCIA' + TableField = 'REFERENCIA' + end + item + DatasetField = 'ID_PROVEEDOR' + TableField = 'ID_PROVEEDOR' + end + item + DatasetField = 'NOMBRE' + TableField = 'NOMBRE' + end + item + DatasetField = 'FECHA_ALBARAN' + TableField = 'FECHA_ALBARAN' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end> + end> + Name = 'InformeListadoPedidos' + Fields = < + item + Name = 'ID_EMPRESA' + DataType = datInteger + end + item + Name = 'ANO' + DataType = datSmallInt + end + item + Name = 'MES' + DataType = datSmallInt + end + item + Name = 'TITULO' + DataType = datString + Size = 19 + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'ID_PROVEEDOR' + DataType = datInteger + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'FECHA_ALBARAN' + DataType = datDateTime + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end> + end item Params = < item Name = 'ID' DataType = datInteger - Value = '' + Value = '11' ParamType = daptInput end> Statements = < item Connection = 'IBX' - TargetTable = 'V_ALBARANES_PROVEEDOR' SQL = - 'SELECT'#10' V_ALBARANES_PROVEEDOR.ID,'#10' V_ALBARANES_PROVEEDOR.ID_EM' + - 'PRESA,'#10' V_ALBARANES_PROVEEDOR.ID_PROVEEDOR,'#10' V_ALBARANES_PROVE' + - 'EDOR.NOMBRE,'#10' V_ALBARANES_PROVEEDOR.FECHA_ALBARAN,'#10' V_ALBARANE' + - 'S_PROVEEDOR.REFERENCIA,'#10' V_ALBARANES_PROVEEDOR.ID_PEDIDO,'#10' V_A' + - 'LBARANES_PROVEEDOR.REF_PED_PROVEEDOR,'#10' V_ALBARANES_PROVEEDOR.CO' + - 'DIGO_POSTAL,'#10' V_ALBARANES_PROVEEDOR.POBLACION,'#10' V_ALBARANES_PR' + - 'OVEEDOR.PROVINCIA,'#10' V_ALBARANES_PROVEEDOR.PERSONA_CONTACTO,'#10' V' + - '_ALBARANES_PROVEEDOR.TELEFONO,'#10' V_ALBARANES_PROVEEDOR.CALLE,'#10' ' + - 'V_ALBARANES_PROVEEDOR.OBSERVACIONES,'#10' V_ALBARANES_PROVEEDOR.IMP' + - 'ORTE_TOTAL,'#10' EMPRESAS.NIF_CIF AS NIF_CIF_EMPRESA,'#10' EMPRESAS.NO' + - 'MBRE AS NOMBRE_EMPRESA,'#10' EMPRESAS.RAZON_SOCIAL AS RAZON_SOCIAL_' + - 'EMPRESA,'#10' EMPRESAS.TELEFONO_1 AS TELEFONO_1_EMPRESA,'#10' EMPRESAS' + - '.FAX AS FAX_EMPRESA,'#10' EMPRESAS.MOVIL_1 AS MOVIL_1_EMPRESA,'#10' EM' + - 'PRESAS.EMAIL_1 AS EMAIL_1_EMPRESA,'#10' EMPRESAS.PAGINA_WEB AS PAGI' + - 'NA_WEB_EMPRESA'#10'FROM'#10' V_ALBARANES_PROVEEDOR'#10' LEFT OUTER JOIN ' + - 'V_PROVEEDORES ON (V_PROVEEDORES.ID = V_ALBARANES_PROVEEDOR.ID_PR' + - 'OVEEDOR)'#10' LEFT OUTER JOIN EMPRESAS ON (EMPRESAS.ID = V_ALBARANE' + - 'S_PROVEEDOR.ID_EMPRESA)'#10'WHERE V_ALBARANES_PROVEEDOR.ID = :ID' + 'SELECT'#10' ALBARANES_PROVEEDOR.ID,'#10' ALBARANES_PROVEEDOR.ID_EMPRES' + + 'A,'#10' ALBARANES_PROVEEDOR.TIPO,'#10' ALBARANES_PROVEEDOR.REFERENCIA,' + + #10' ALBARANES_PROVEEDOR.FECHA_ALBARAN,'#10' ALBARANES_PROVEEDOR.OBSE' + + 'RVACIONES,'#10' CONTACTOS.NOMBRE,'#10' COALESCE(CONTACTOS_DIRECCIONES.' + + 'FAX, CONTACTOS.FAX) AS FAX,'#10' ALBARANES_PROVEEDOR.PERSONA_CONTAC' + + 'TO_PROV AS PERSONA_CONTACTO,'#10' PROVEEDORES_DATOS.CODIGO_ASIGNADO' + + ' AS CODIGO_CLIENTE,'#10' ALBARANES_PROVEEDOR.ID_ALMACEN,'#10' COALESCE' + + '(ALMACENES.CALLE, ALBARANES_PROVEEDOR.CALLE) AS CALLE,'#10' COALESC' + + 'E(ALMACENES.POBLACION, ALBARANES_PROVEEDOR.POBLACION) AS POBLACI' + + 'ON,'#10' COALESCE(ALMACENES.PROVINCIA, ALBARANES_PROVEEDOR.PROVINCI' + + 'A) AS PROVINCIA,'#10' COALESCE(ALMACENES.CODIGO_POSTAL, ALBARANES_P' + + 'ROVEEDOR.CODIGO_POSTAL) AS CODIGO_POSTAL,'#10' ALBARANES_PROVEEDOR.' + + 'PERSONA_CONTACTO AS ENTREGAR_A,'#10' ALBARANES_PROVEEDOR.IMPORTE_TO' + + 'TAL'#10'FROM'#10' ALBARANES_PROVEEDOR'#10' INNER JOIN CONTACTOS ON (CONTAC' + + 'TOS.ID = ALBARANES_PROVEEDOR.ID_PROVEEDOR)'#10' LEFT OUTER JOIN PRO' + + 'VEEDORES_DATOS ON (PROVEEDORES_DATOS.ID_PROVEEDOR = ALBARANES_PR' + + 'OVEEDOR.ID_PROVEEDOR)'#10' LEFT OUTER JOIN CONTACTOS_DIRECCIONES ON' + + ' (CONTACTOS_DIRECCIONES.ID = ALBARANES_PROVEEDOR.ID_DIRECCION)'#10' ' + + ' LEFT OUTER JOIN ALMACENES ON (ALMACENES.ID = ALBARANES_PROVEEDO' + + 'R.ID_ALMACEN)'#10'WHERE ALBARANES_PROVEEDOR.ID = :ID'#10#10 StatementType = stSQL ColumnMappings = < + item + DatasetField = 'ID' + TableField = 'ID' + end + item + DatasetField = 'ID_EMPRESA' + TableField = 'ID_EMPRESA' + end + item + DatasetField = 'REFERENCIA' + TableField = 'REFERENCIA' + end + item + DatasetField = 'FECHA_ALBARAN' + TableField = 'FECHA_ALBARAN' + end item DatasetField = 'OBSERVACIONES' TableField = 'OBSERVACIONES' @@ -120,6 +217,22 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor DatasetField = 'NOMBRE' TableField = 'NOMBRE' end + item + DatasetField = 'FAX' + TableField = 'FAX' + end + item + DatasetField = 'PERSONA_CONTACTO' + TableField = 'PERSONA_CONTACTO' + end + item + DatasetField = 'CODIGO_CLIENTE' + TableField = 'CODIGO_CLIENTE' + end + item + DatasetField = 'ID_ALMACEN' + TableField = 'ID_ALMACEN' + end item DatasetField = 'CALLE' TableField = 'CALLE' @@ -129,84 +242,24 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor TableField = 'POBLACION' end item - DatasetField = 'REFERENCIA' - TableField = 'REFERENCIA' - end - item - DatasetField = 'ID' - TableField = 'ID' - end - item - DatasetField = 'ID_EMPRESA' - TableField = 'ID_EMPRESA' + DatasetField = 'PROVINCIA' + TableField = 'PROVINCIA' end item DatasetField = 'CODIGO_POSTAL' TableField = 'CODIGO_POSTAL' end item - DatasetField = 'PROVINCIA' - TableField = 'PROVINCIA' - end - item - DatasetField = 'PERSONA_CONTACTO' - TableField = 'PERSONA_CONTACTO' - end - item - DatasetField = 'TELEFONO' - TableField = 'TELEFONO' - end - item - DatasetField = 'NIF_CIF_EMPRESA' - TableField = 'NIF_CIF_EMPRESA' - end - item - DatasetField = 'NOMBRE_EMPRESA' - TableField = 'NOMBRE_EMPRESA' - end - item - DatasetField = 'RAZON_SOCIAL_EMPRESA' - TableField = 'RAZON_SOCIAL_EMPRESA' - end - item - DatasetField = 'TELEFONO_1_EMPRESA' - TableField = 'TELEFONO_1_EMPRESA' - end - item - DatasetField = 'FAX_EMPRESA' - TableField = 'FAX_EMPRESA' - end - item - DatasetField = 'MOVIL_1_EMPRESA' - TableField = 'MOVIL_1_EMPRESA' - end - item - DatasetField = 'EMAIL_1_EMPRESA' - TableField = 'EMAIL_1_EMPRESA' - end - item - DatasetField = 'PAGINA_WEB_EMPRESA' - TableField = 'PAGINA_WEB_EMPRESA' - end - item - DatasetField = 'FECHA_ALBARAN' - TableField = 'FECHA_ALBARAN' - end - item - DatasetField = 'ID_PEDIDO' - TableField = 'ID_PEDIDO' + DatasetField = 'ENTREGAR_A' + TableField = 'ENTREGAR_A' end item DatasetField = 'IMPORTE_TOTAL' TableField = 'IMPORTE_TOTAL' end item - DatasetField = 'ID_PROVEEDOR' - TableField = 'ID_PROVEEDOR' - end - item - DatasetField = 'REF_PED_PROVEEDOR' - TableField = 'REF_PED_PROVEEDOR' + DatasetField = 'TIPO' + TableField = 'TIPO' end> end> Name = 'Informe_Cabecera' @@ -214,14 +267,16 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor item Name = 'ID' DataType = datInteger + InPrimaryKey = True end item Name = 'ID_EMPRESA' DataType = datInteger end item - Name = 'ID_PROVEEDOR' - DataType = datInteger + Name = 'TIPO' + DataType = datString + Size = 1 end item Name = 'REFERENCIA' @@ -232,144 +287,125 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor Name = 'FECHA_ALBARAN' DataType = datDateTime end - item - Name = 'ID_PEDIDO' - DataType = datInteger - end item Name = 'OBSERVACIONES' DataType = datMemo end - item - Name = 'REF_PED_PROVEEDOR' - DataType = datString - Size = 255 - end item Name = 'NOMBRE' DataType = datString Size = 255 end + item + Name = 'FAX' + DataType = datString + Size = 25 + end + item + Name = 'PERSONA_CONTACTO' + DataType = datString + Size = 255 + end + item + Name = 'CODIGO_CLIENTE' + DataType = datString + Size = 255 + end + item + Name = 'ID_ALMACEN' + DataType = datInteger + end item Name = 'CALLE' DataType = datString Size = 255 end + item + Name = 'POBLACION' + DataType = datString + Size = 255 + end + item + Name = 'PROVINCIA' + DataType = datString + Size = 255 + end item Name = 'CODIGO_POSTAL' DataType = datString Size = 10 end item - Name = 'PROVINCIA' - DataType = datString - Size = 255 - end - item - Name = 'PERSONA_CONTACTO' - DataType = datString - Size = 255 - end - item - Name = 'TELEFONO' - DataType = datString - Size = 25 - end - item - Name = 'POBLACION' + Name = 'ENTREGAR_A' DataType = datString Size = 255 end item Name = 'IMPORTE_TOTAL' - DataType = datFloat - end - item - Name = 'NIF_CIF_EMPRESA' - DataType = datString - Size = 15 - end - item - Name = 'NOMBRE_EMPRESA' - DataType = datString - Size = 255 - end - item - Name = 'RAZON_SOCIAL_EMPRESA' - DataType = datString - Size = 255 - end - item - Name = 'TELEFONO_1_EMPRESA' - DataType = datString - Size = 25 - end - item - Name = 'FAX_EMPRESA' - DataType = datString - Size = 25 - end - item - Name = 'MOVIL_1_EMPRESA' - DataType = datString - Size = 25 - end - item - Name = 'EMAIL_1_EMPRESA' - DataType = datString - Size = 255 - end - item - Name = 'PAGINA_WEB_EMPRESA' - DataType = datString - Size = 255 + DataType = datCurrency end> end item Params = < item Name = 'ID_ALBARAN' - DataType = datInteger Value = '' ParamType = daptInput end> Statements = < item Connection = 'IBX' - TargetTable = 'ALBARANES_CLIENTE_DETALLES' + TargetTable = 'ALBARANES_PROVEEDOR_DETALLES' SQL = - 'SELECT ALBARANES_PROVEEDOR_DETALLES.ID, ALBARANES_PROVEEDOR_DETA' + - 'LLES.ID_ALBARAN,'#10' ALBARANES_PROVEEDOR_DETALLES.POSICION, A' + - 'LBARANES_PROVEEDOR_DETALLES.TIPO_DETALLE,'#10' ALBARANES_PROVE' + - 'EDOR_DETALLES.CONCEPTO, ALBARANES_PROVEEDOR_DETALLES.CANTIDAD,'#10' ' + - ' ALBARANES_PROVEEDOR_DETALLES.IMPORTE_UNIDAD, ALBARANES_PRO' + - 'VEEDOR_DETALLES.IMPORTE_TOTAL,'#10' ARTICULOS.REFERENCIA, ARTI' + - 'CULOS.FAMILIA, ARTICULOS.REFERENCIA_PROV as REFERENCIA_PROVEEDOR' + - #10#10'FROM ALBARANES_PROVEEDOR_DETALLES'#10'LEFT JOIN ARTICULOS ON (ALBA' + - 'RANES_PROVEEDOR_DETALLES.ID_ARTICULO = ARTICULOS.ID)'#10'WHERE ID_AL' + - 'BARAN = :ID_ALBARAN'#10'ORDER BY POSICION' + 'SELECT DET.ID, DET.ID_ALBARAN,'#10' DET.POSICION, DET.TIPO_DET' + + 'ALLE,'#10' ARTICULOS.REFERENCIA, DET.CONCEPTO, DET.CANTIDAD,'#10' ' + + ' DET.UNIDAD_MEDIDA, DET.IMPORTE_UNIDAD - (DET.IMPORTE_UNIDA' + + 'D * (COALESCE(DET.DESCUENTO,0) / 100)) as IMPORTE_UNIDAD, DET.IM' + + 'PORTE_TOTAL,'#10' ARTICULOS_PROVEEDORES.REFERENCIA_PROV as REF' + + 'ERENCIA_PROVEEDOR,'#10' ARTICULOS.REFERENCIA_FABR as REFERENCI' + + 'A_FABRICANTE'#10'FROM ALBARANES_PROVEEDOR_DETALLES DET'#10'LEFT OUTER JO' + + 'IN ARTICULOS ON (DET.ID_ARTICULO = ARTICULOS.ID)'#10'LEFT JOIN ALBAR' + + 'ANES_PROVEEDOR ON (ALBARANES_PROVEEDOR.ID = DET.ID_ALBARAN)'#10'LEFT' + + ' JOIN ARTICULOS_PROVEEDORES ON ((ARTICULOS_PROVEEDORES.ID_ARTICU' + + 'LO = ARTICULOS.ID) AND (ARTICULOS_PROVEEDORES.ID_PROVEEDOR = ALB' + + 'ARANES_PROVEEDOR.ID_PROVEEDOR))'#10'WHERE DET.ID_ALBARAN = :ID_ALBAR' + + 'AN AND DET.VISIBLE = 1 AND {Where}'#10'ORDER BY DET.ID_ALBARAN, DET.' + + 'POSICION;'#10#10 StatementType = stSQL ColumnMappings = < item - DatasetField = 'CANTIDAD' - TableField = 'CANTIDAD' + DatasetField = 'ID' + TableField = 'ID' + end + item + DatasetField = 'ID_ALBARAN' + TableField = 'ID_ALBARAN' end item DatasetField = 'POSICION' TableField = 'POSICION' end - item - DatasetField = 'ID' - TableField = 'ID' - end item DatasetField = 'TIPO_DETALLE' TableField = 'TIPO_DETALLE' end + item + DatasetField = 'REFERENCIA' + TableField = '' + SQLOrigin = 'REFERENCIA' + end item DatasetField = 'CONCEPTO' TableField = 'CONCEPTO' end + item + DatasetField = 'CANTIDAD' + TableField = 'CANTIDAD' + end + item + DatasetField = 'UNIDAD_MEDIDA' + TableField = 'UNIDAD_MEDIDA' + end item DatasetField = 'IMPORTE_UNIDAD' TableField = 'IMPORTE_UNIDAD' @@ -378,21 +414,15 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor DatasetField = 'IMPORTE_TOTAL' TableField = 'IMPORTE_TOTAL' end - item - DatasetField = 'REFERENCIA' - TableField = 'REFERENCIA' - end - item - DatasetField = 'FAMILIA' - TableField = 'FAMILIA' - end item DatasetField = 'REFERENCIA_PROVEEDOR' - TableField = 'REFERENCIA_PROVEEDOR' + TableField = '' + SQLOrigin = 'REFERENCIA_PROVEEDOR' end item - DatasetField = 'ID_ALBARAN' - TableField = 'ID_ALBARAN' + DatasetField = 'REFERENCIA_FABRICANTE' + TableField = '' + SQLOrigin = 'REFERENCIA_FABRICANTE' end> end> Name = 'Informe_Detalles' @@ -400,6 +430,7 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor item Name = 'ID' DataType = datInteger + InPrimaryKey = True end item Name = 'ID_ALBARAN' @@ -412,7 +443,7 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor item Name = 'TIPO_DETALLE' DataType = datString - Size = 10 + Size = 25 end item Name = 'REFERENCIA' @@ -426,7 +457,12 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor end item Name = 'CANTIDAD' - DataType = datInteger + DataType = datFloat + end + item + Name = 'UNIDAD_MEDIDA' + DataType = datString + Size = 255 end item Name = 'IMPORTE_UNIDAD' @@ -434,15 +470,15 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor end item Name = 'IMPORTE_TOTAL' - DataType = datFloat + DataType = datCurrency end item - Name = 'FAMILIA' + Name = 'REFERENCIA_PROVEEDOR' DataType = datString Size = 255 end item - Name = 'REFERENCIA_PROVEEDOR' + Name = 'REFERENCIA_FABRICANTE' DataType = datString Size = 255 end> @@ -456,200 +492,6 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor Left = 48 Top = 16 end - object DataDictionary: TDADataDictionary - Fields = < - item - Name = 'FacturasCliente_ID' - DataType = datAutoInc - Required = True - DisplayLabel = 'ID' - end - item - Name = 'FacturasCliente_ID_EMPRESA' - DataType = datInteger - DisplayLabel = 'ID_EMPRESA' - end - item - Name = 'FacturasCliente_ID_CONTRATO' - DataType = datInteger - DisplayLabel = 'ID_CONTRATO' - end - item - Name = 'FacturasCliente_FECHA_FACTURA' - DataType = datDateTime - DisplayLabel = 'Fecha de las factura' - end - item - Name = 'FacturasCliente_VENCIMIENTO' - DataType = datInteger - DisplayLabel = 'Vencimiento' - end - item - Name = 'FacturasCliente_SITUACION' - DataType = datString - Size = 255 - DisplayLabel = 'Situaci'#243'n' - end - item - Name = 'FacturasCliente_BASE_IMPONIBLE' - DataType = datFloat - DisplayLabel = 'Base imponible' - Alignment = taRightJustify - end - item - Name = 'FacturasCliente_IMPORTE_DESCUENTO' - DataType = datFloat - DisplayLabel = 'Importe dto.' - Alignment = taRightJustify - end - item - Name = 'FacturasCliente_IMPORTE_IVA' - DataType = datFloat - DisplayLabel = 'Importe IVA' - Alignment = taRightJustify - end - item - Name = 'FacturasCliente_IMPORTE_TOTAL' - DataType = datFloat - DisplayLabel = 'Importe total' - Alignment = taRightJustify - end - item - Name = 'FacturasCliente_FORMA_PAGO' - DataType = datMemo - DisplayLabel = 'Forma de pago' - end - item - Name = 'FacturasCliente_ID_CLIENTE' - DataType = datInteger - DisplayLabel = 'ID_CLIENTE' - end - item - Name = 'FacturasCliente_NIF_CIF' - DataType = datString - Size = 15 - DisplayLabel = 'NIF/CIF' - end - item - Name = 'FacturasCliente_CODIGO_POSTAL' - DataType = datString - Size = 10 - DisplayLabel = 'C'#243'd. postal' - end - item - Name = 'FacturasCliente_FECHA_ALTA' - DataType = datDateTime - DisplayLabel = 'FECHA_ALTA' - end - item - Name = 'FacturasCliente_FECHA_MODIFICACION' - DataType = datDateTime - DisplayLabel = 'FECHA_MODIFICACION' - end - item - Name = 'FacturasCliente_OBSERVACIONES' - DataType = datMemo - DisplayLabel = 'Observaciones' - end - item - Name = 'FacturasCliente_NOMBRE' - DataType = datString - Size = 100 - DisplayLabel = 'Cliente' - end - item - Name = 'FacturasCliente_CALLE' - DataType = datString - Size = 150 - DisplayLabel = 'Direcci'#243'n' - end - item - Name = 'FacturasCliente_PROVINCIA' - DataType = datString - Size = 30 - DisplayLabel = 'Provincia' - end - item - Name = 'FacturasCliente_POBLACION' - DataType = datString - Size = 150 - DisplayLabel = 'Poblaci'#243'n' - end - item - Name = 'FacturasCliente_IVA' - DataType = datFloat - DisplayLabel = 'IVA' - end - item - Name = 'FacturasCliente_USUARIO' - DataType = datString - Size = 100 - DisplayLabel = 'USUARIO' - end - item - Name = 'FacturasCliente_REFERENCIA' - DataType = datString - Size = 20 - DisplayLabel = 'Referencia' - end - item - Name = 'FacturasCliente_DESCUENTO' - DataType = datFloat - DisplayLabel = 'Dto.' - end - item - Name = 'FacturasCliente_Detalles_ID' - DataType = datAutoInc - Required = True - DisplayLabel = 'ID' - end - item - Name = 'FacturasCliente_Detalles_ID_FACTURA' - DataType = datInteger - DisplayLabel = 'ID_FACTURA' - end - item - Name = 'FacturasCliente_Detalles_TIPO_DETALLE' - DataType = datString - Size = 10 - DisplayLabel = 'Tipo detalle' - end - item - Name = 'FacturasCliente_Detalles_CONCEPTO' - DataType = datString - Size = 2000 - DisplayLabel = 'Concepto' - end - item - Name = 'FacturasCliente_Detalles_IMPORTE_UNIDAD' - DataType = datFloat - DisplayLabel = 'Importe unidad' - Alignment = taRightJustify - end - item - Name = 'FacturasCliente_Detalles_IMPORTE_TOTAL' - DataType = datFloat - DisplayLabel = 'Importe total' - Alignment = taRightJustify - end - item - Name = 'FacturasCliente_Detalles_VISIBLE' - DataType = datInteger - DisplayLabel = #191'Visible?' - end - item - Name = 'FacturasCliente_Detalles_POSICION' - DataType = datInteger - DisplayLabel = 'Posici'#243'n' - end - item - Name = 'FacturasCliente_Detalles_CANTIDAD' - DataType = datInteger - DisplayLabel = 'Cantidad' - end> - Left = 46 - Top = 158 - end object frxReport: TfrxReport Version = '4.3' DotMatrixReport = False @@ -660,7 +502,7 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor PrintOptions.Printer = 'Por defecto' PrintOptions.PrintOnSheet = 0 ReportOptions.CreateDate = 39065.872423495400000000 - ReportOptions.LastChange = 39290.783958333330000000 + ReportOptions.LastChange = 39829.854499780090000000 ScriptLanguage = 'PascalScript' ScriptText.Strings = ( '' @@ -668,7 +510,7 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor 'var' ' Cadena: String;' 'begin' - ' DatosEmpresa.Lines.Clear;' + '{ DatosEmpresa.Lines.Clear;' ' if ( <> '#39#39') then' ' Cadena := '#39'TLF: '#39' + ;' ' if ( <> '#39#39') then' @@ -676,87 +518,63 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor ' Cadena := Cadena + '#39' FAX: '#39' + ;' ' DatosEmpresa.Lines.Add(Cadena);' + '}' 'end;' '' 'procedure NombreEmpresaOnBeforePrint(Sender: TfrxComponent);' 'begin' - ' NombreEmpresa.Lines.Clear;' + '{ NombreEmpresa.Lines.Clear;' ' NombreEmpresa.Lines.Add();' + '}' 'end;' '' - 'procedure DireccionEnvioOnBeforePrint(Sender: TfrxComponent);' - 'var' - ' ACadena : String;' + 'procedure Memo35OnBeforePrint(Sender: TfrxComponent);' 'begin' - ' ACadena := '#39#39';' - ' DireccionEnvio.Lines.Clear;' - '' - ' if ( <> '#39#39') then' - ' ACadena := ;' - ' if ( <> '#39#39') then' - ' ACadena := ACadena + '#39' (tlf: '#39' + ' + - ' + '#39' )'#39';' - '' - ' DireccionEnvio.Lines.Add(ACadena);' - ' ACadena := '#39#39';' - ' DireccionEnvio.Lines.Add(ACadena);' - '' - ' DireccionEnvio.Lines.Add();' - ' if ( <> '#39#39') then' - ' ACadena := + '#39' '#39';' - ' if ( <> '#39#39') then' - ' ACadena := ACadena + ;' - '' - ' if (ACadena <> '#39#39') then' - ' DireccionEnvio.Lines.Add(ACadena);' - '' - ' if ( <> '#39#39') then' - ' DireccionEnvio.Lines.Add();' + '{ if not then ' + + ' ' + ' Memo35.Lines.Clear;} ' 'end;' '' - 'procedure Memo2OnBeforePrint(Sender: TfrxComponent);' + 'procedure Memo36OnBeforePrint(Sender: TfrxComponent);' 'begin' - ' Memo2.Lines.Clear;' - ' if (StrToFloat() < 0) then' - ' Memo2.Lines.Add('#39'ORDEN DE DEVOLUCI'#211'N'#39')' - ' else' - ' Memo2.Lines.Add('#39'ALBAR'#193'N DE PROVEEDOR'#39')' + + '{ if not then ' + + ' ' + ' Memo36.Lines.Clear;} ' 'end;' '' - 'procedure Memo5OnBeforePrint(Sender: TfrxComponent);' + 'procedure Memo6OnBeforePrint(Sender: TfrxComponent);' 'begin' - ' if (StrToFloat() < 0) then' - ' begin' - ' Memo5.Lines.Clear;' - ' Memo5.Lines.Add('#39'N'#186' orden:'#39');' - ' end;' + + '{ if not then ' + + ' ' + ' Memo6.Lines.Clear;} ' 'end;' '' - 'procedure Memo1OnBeforePrint(Sender: TfrxComponent);' + 'procedure PageHeader2OnBeforePrint(Sender: TfrxComponent);' 'begin' - ' if (StrToFloat() < 0) then' - ' begin' - ' Memo1.Lines.Clear;' - ' Memo1.Lines.Add('#39'Fecha orden:'#39');' - ' end;' - 'end;' - '' - 'procedure PageHeader1OnBeforePrint(Sender: TfrxComponent);' - 'begin' - ' if not Engine.FinalPass then' + ' if not Engine.FinalPass then' ' Set('#39'TotalPaginas'#39', ( + 1));' '' ' if Engine.FinalPass then' - ' Set('#39'Pagina'#39', ( + 1));' + ' Set('#39'Pagina'#39', ( + 1)); ' 'end;' '' 'procedure frxReportOnStartReport(Sender: TfrxComponent);' 'begin' ' Set('#39'Pagina'#39', 0);' - ' Set('#39'TotalPaginas'#39', 0);' + ' Set('#39'TotalPaginas'#39', 0); ' 'end;' '' + 'procedure Memo21OnBeforePrint(Sender: TfrxComponent);' + 'begin' + ' if ( = '#39'D'#39') then' + ' begin ' + ' Memo21.Lines.Clear;' + ' Memo21.Lines.Add('#39'ORDEN DE DEVOLUCION'#39');' + ' end; ' + 'end;' '' 'begin' '' @@ -764,21 +582,335 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor ShowProgress = False StoreInDFM = False OnStartReport = 'frxReportOnStartReport' - Left = 169 + Left = 145 Top = 16 end object frxDBCabecera: TfrxDBDataset UserName = 'frxDBCabecera' CloseDataSource = False - DataSource = DADataCabecera + DataSource = DADSCabecera Left = 264 Top = 16 end object frxDBDetalles: TfrxDBDataset UserName = 'frxDBDetalles' CloseDataSource = False - DataSource = DADataDetalles + DataSource = DADSDetalles Left = 344 Top = 16 end + object IBDatabase1: TIBDatabase + DatabaseName = 'C:\Codigo Tecsitel\Database\FACTUGES.FDB' + Params.Strings = ( + 'user_name=sysdba' + 'password=masterkey' + 'lc_ctype=ISO8859_1') + LoginPrompt = False + DefaultTransaction = IBTransaction1 + Left = 40 + Top = 256 + end + object IBTransaction1: TIBTransaction + Left = 40 + Top = 312 + end + object DataSource1: TDataSource + DataSet = cabecera + Left = 176 + Top = 256 + end + object DataSource3: TDataSource + DataSet = detalles + Left = 176 + Top = 320 + end + object detalles: TIBQuery + Database = IBDatabase1 + Transaction = IBTransaction1 + SQL.Strings = ( + + 'SELECT ALBARANES_PROVEEDOR_DETALLES.ID, ALBARANES_PROVEEDOR_DETA' + + 'LLES.ID_ALBARAN,' + + ' ALBARANES_PROVEEDOR_DETALLES.POSICION, ALBARANES_PROVEEDO' + + 'R_DETALLES.TIPO_DETALLE,' + + ' F_RTFTOTEXT(ALBARANES_PROVEEDOR_DETALLES.CONCEPTO) as CON' + + 'CEPTO, ALBARANES_PROVEEDOR_DETALLES.CANTIDAD,' + ' ALBARANES_PROVEEDOR_DETALLES.UNIDAD_MEDIDA,' + + ' ALBARANES_PROVEEDOR_DETALLES.IMPORTE_UNIDAD, ALBARANES_PR' + + 'OVEEDOR_DETALLES.IMPORTE_TOTAL,' + ' ARTICULOS.REFERENCIA' + 'FROM ALBARANES_PROVEEDOR_DETALLES' + + ' LEFT JOIN ARTICULOS ON (ALBARANES_PROVEEDOR_DETALLES.ID_ART' + + 'ICULO = ARTICULOS.ID)' + 'WHERE' + ' ID_ALBARAN = :ID_ALBARAN AND (VISIBLE <> 0)' + 'ORDER BY ID_ALBARAN, POSICION') + Left = 112 + Top = 320 + ParamData = < + item + DataType = ftUnknown + Name = 'ID_ALBARAN' + ParamType = ptUnknown + end> + object detallesID: TIntegerField + FieldName = 'ID' + Origin = '"ALBARANES_CLIENTE_DETALLES"."ID"' + ProviderFlags = [pfInUpdate, pfInWhere, pfInKey] + Required = True + end + object detallesID_ALBARAN: TIntegerField + FieldName = 'ID_ALBARAN' + Origin = '"ALBARANES_CLIENTE_DETALLES"."ID_ALBARAN"' + Required = True + end + object detallesPOSICION: TIntegerField + FieldName = 'POSICION' + Origin = '"ALBARANES_CLIENTE_DETALLES"."POSICION"' + end + object detallesTIPO_DETALLE: TIBStringField + FieldName = 'TIPO_DETALLE' + Origin = '"ALBARANES_CLIENTE_DETALLES"."TIPO_DETALLE"' + Size = 10 + end + object detallesCONCEPTO: TIBStringField + FieldName = 'CONCEPTO' + Origin = '"ALBARANES_CLIENTE_DETALLES"."CONCEPTO"' + Size = 254 + end + object detallesCANTIDAD: TIntegerField + FieldName = 'CANTIDAD' + Origin = '"ALBARANES_CLIENTE_DETALLES"."CANTIDAD"' + end + object detallesIMPORTE_UNIDAD: TIBBCDField + FieldName = 'IMPORTE_UNIDAD' + Origin = '"ALBARANES_CLIENTE_DETALLES"."IMPORTE_UNIDAD"' + Precision = 18 + Size = 2 + end + object detallesIMPORTE_TOTAL: TIBBCDField + FieldName = 'IMPORTE_TOTAL' + Origin = '"ALBARANES_CLIENTE_DETALLES"."IMPORTE_TOTAL"' + Precision = 18 + Size = 2 + end + object detallesREFERENCIA: TIBStringField + FieldName = 'REFERENCIA' + Origin = '"ARTICULOS"."REFERENCIA"' + Size = 255 + end + end + object cabecera: TIBQuery + Database = IBDatabase1 + Transaction = IBTransaction1 + SQL.Strings = ( + 'SELECT' + ' V_ALBARANES_PROVEEDOR.ID, V_ALBARANES_PROVEEDOR.ID_EMPRESA,' + ' V_ALBARANES_PROVEEDOR.ID_PROVEEDOR,' + ' V_ALBARANES_PROVEEDOR.FECHA_ALBARAN,' + ' V_ALBARANES_PROVEEDOR.REFERENCIA,' + ' V_ALBARANES_PROVEEDOR.REFERENCIA_PROVEEDOR,' + ' V_ALBARANES_PROVEEDOR.OBSERVACIONES,' + ' CONTACTOS.NIF_CIF, CONTACTOS.NOMBRE,' + ' V_ALBARANES_PROVEEDOR.PERSONA_CONTACTO,' + + ' COALESCE(CONTACTOS_DIRECCIONES.CALLE, CONTACTOS.CALLE) AS CALL' + + 'E,' + + ' COALESCE(CONTACTOS_DIRECCIONES.POBLACION, CONTACTOS.POBLACION)' + + ' AS POBLACION,' + + ' COALESCE(CONTACTOS_DIRECCIONES.PROVINCIA, CONTACTOS.PROVINCIA)' + + ' AS PROVINCIA,' + + ' COALESCE(CONTACTOS_DIRECCIONES.CODIGO_POSTAL, CONTACTOS.CODIGO' + + '_POSTAL) AS CODIGO_POSTAL' + 'FROM' + ' V_ALBARANES_PROVEEDOR' + + ' INNER JOIN CONTACTOS ON (CONTACTOS.ID = V_ALBARANES_PROVEEDOR.' + + 'ID_PROVEEDOR)' + + ' LEFT OUTER JOIN CONTACTOS_DIRECCIONES ON (CONTACTOS_DIRECCIONE' + + 'S.ID = V_ALBARANES_PROVEEDOR.ID_DIRECCION)' + 'WHERE V_ALBARANES_PROVEEDOR.ID = 11') + Left = 112 + Top = 256 + end + object tbl_Cabecera: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ID' + DataType = datInteger + InPrimaryKey = True + end + item + Name = 'ID_EMPRESA' + DataType = datInteger + end + item + Name = 'ID_PROVEEDOR' + DataType = datInteger + end + item + Name = 'FECHA_ALBARAN' + DataType = datDateTime + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'REFERENCIA_PROVEEDOR' + DataType = datString + Size = 255 + end + item + Name = 'NIF_CIF' + DataType = datString + Size = 15 + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'PERSONA_CONTACTO' + DataType = datString + Size = 255 + end + item + Name = 'CALLE' + DataType = datString + Size = 255 + end + item + Name = 'POBLACION' + DataType = datString + Size = 255 + end + item + Name = 'PROVINCIA' + DataType = datString + Size = 255 + end + item + Name = 'CODIGO_POSTAL' + DataType = datString + Size = 10 + end> + Params = < + item + Name = 'ID' + DataType = datInteger + Value = '11' + ParamType = daptInput + end> + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = DABin2DataStreamer1 + DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] + MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] + LogicalName = 'Informe_Cabecera' + IndexDefs = <> + Left = 264 + Top = 128 + end + object tbl_Detalles: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ID' + DataType = datInteger + InPrimaryKey = True + end + item + Name = 'ID_ALBARAN' + DataType = datInteger + end + item + Name = 'POSICION' + DataType = datInteger + end + item + Name = 'TIPO_DETALLE' + DataType = datString + Size = 25 + end + item + Name = 'CONCEPTO' + DataType = datString + Size = 32765 + end + item + Name = 'CANTIDAD' + DataType = datFloat + end + item + Name = 'UNIDAD_MEDIDA' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_UNIDAD' + DataType = datCurrency + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end> + Params = < + item + Name = 'ID_ALBARAN' + DataType = datInteger + Value = '11' + ParamType = daptInput + end> + MasterParamsMappings.Strings = ( + 'ID_ALBARAN=ID') + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = DABin2DataStreamer1 + DetailFields = 'ID_ALBARAN' + DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] + MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] + LogicalName = 'Informe_Detalles' + IndexDefs = <> + Left = 344 + Top = 128 + end + object frxPDFExport1: TfrxPDFExport + ShowDialog = False + UseFileCache = True + ShowProgress = False + PrintOptimized = True + Outline = False + Author = 'FactuGES' + Subject = 'FactuGES' + Background = False + Creator = 'FactuGES' + HTMLTags = True + Left = 344 + Top = 304 + end + object DABin2DataStreamer1: TDABin2DataStreamer + Left = 48 + Top = 88 + end end diff --git a/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.pas b/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.pas index 98d58bb6..b0ce3b48 100644 --- a/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.pas +++ b/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.pas @@ -7,15 +7,13 @@ uses Dialogs, frxClass, frxDBSet, uDAScriptingProvider, uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient, frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes, - uDAInterfaces, uDADataStreamer; + uDAInterfaces, uDADataStreamer, IBCustomDataSet, IBQuery, IBDatabase, + uDAMemDataTable, frxExportPDF, FactuGES_Intf, uDABin2DataStreamer; type TRptAlbaranesProveedor = class(TDataModule) - DADataCabecera: TDADataSource; - DADataDetalles: TDADataSource; - tbl_Cabecera: TDACDSDataTable; - tbl_Detalles: TDACDSDataTable; - DABINAdapter: TDABINAdapter; + DADSCabecera: TDADataSource; + DADSDetalles: TDADataSource; frxRichObject1: TfrxRichObject; frxBarCodeObject1: TfrxBarCodeObject; frxOLEObject1: TfrxOLEObject; @@ -25,16 +23,35 @@ type frxChartObject1: TfrxChartObject; frxDBCabecera: TfrxDBDataset; frxDBDetalles: TfrxDBDataset; - schReport: TDASchema; - DataDictionary: TDADataDictionary; frxReport: TfrxReport; + IBDatabase1: TIBDatabase; + IBTransaction1: TIBTransaction; + DataSource1: TDataSource; + DataSource3: TDataSource; + detalles: TIBQuery; + cabecera: TIBQuery; + detallesID: TIntegerField; + detallesID_ALBARAN: TIntegerField; + detallesPOSICION: TIntegerField; + detallesTIPO_DETALLE: TIBStringField; + detallesCONCEPTO: TIBStringField; + detallesCANTIDAD: TIntegerField; + detallesIMPORTE_UNIDAD: TIBBCDField; + detallesIMPORTE_TOTAL: TIBBCDField; + detallesREFERENCIA: TIBStringField; + tbl_Cabecera: TDAMemDataTable; + tbl_Detalles: TDAMemDataTable; + frxPDFExport1: TfrxPDFExport; + DABin2DataStreamer1: TDABin2DataStreamer; + schReport: TDASchema; procedure DataModuleCreate(Sender: TObject); private FConnection: IDAConnection; //Genera cada uno de los albaranes a imprimir - procedure GenerarAlbaran(const ID: integer); overload; + procedure _GenerarAlbaran(const AID: Integer); public - function GenerarAlbaran(const AID : String): Binary; overload; + function GenerarAlbaran(const AListaID : TIntegerArray): Binary; + function GenerarAlbaranEnPDF(const ListaID : TIntegerArray): Binary; end; implementation @@ -52,7 +69,7 @@ const ds_InformeDetalles = 'Informe_Detalles'; -{ TRptAlbaranesCliente } +{ TRptAlbaranesProveedor } procedure TRptAlbaranesProveedor.DataModuleCreate(Sender: TObject); @@ -60,63 +77,66 @@ begin schReport.ConnectionManager := dmServer.ConnectionManager; FConnection := dmServer.DarNuevaConexion; frxReport.EngineOptions.NewSilentMode := simReThrow; + + frxDBCabecera.DataSource := DADSCabecera; + frxDBDetalles.DataSource := DADSDetalles; end; -function TRptAlbaranesProveedor.GenerarAlbaran(const AID: String): Binary; +function TRptAlbaranesProveedor.GenerarAlbaran(const AListaID : TIntegerArray): Binary; var - ID_Albaranes: TStringList; i: Integer; begin Result := Binary.Create; - FConnection.BeginTransaction; - try - ID_Albaranes := TStringList.Create; - ID_Albaranes.CommaText := AID; - //Vamos generando todos y cada uno de los albaranes recibidos - for i := 0 to ID_Albaranes.Count - 1 do - GenerarAlbaran(StrToInt(ID_Albaranes.Strings[i])); - + for i := 0 to AListaID.Count - 1 do + _GenerarAlbaran(AListaID.Items[i]); frxReport.PreviewPages.SaveToStream(Result); - finally - FConnection.RollbackTransaction; end; end; -procedure TRptAlbaranesProveedor.GenerarAlbaran(const ID: integer); +function TRptAlbaranesProveedor.GenerarAlbaranEnPDF( + const ListaID: TIntegerArray): Binary; var - AStream: TMemoryStream; - dsMaster: IDADataset; - dsDetail: IDADataset; - AInforme: Variant; + i: Integer; begin - AStream := TMemoryStream.Create; - + Result := Binary.Create; try - dsMaster := schReport.NewDataset(FConnection, ds_InformeCabecera, ['ID'], [ID]); - dsDetail := schReport.NewDataset(FConnection, ds_InformeDetalles, ['ID_ALBARAN'], [ID], False); + //Vamos generando todos y cada uno de los presupuestos recibidos + for i := 0 to ListaID.Count - 1 do + _GenerarAlbaran(ListaID.Items[i]); - AStream.Clear; - DABINAdapter.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1); - DABINAdapter.ReadDataset(AStream, tbl_Cabecera, TRUE, '', TRUE, TRUE); + frxPDFExport1.Stream := Result; + frxReport.Export(frxPDFExport1) + finally + end; +end; - AStream.Clear; - DABINAdapter.WriteDataset(AStream, dsDetail, [woRows, woSchema], -1); - DABINAdapter.ReadDataset(AStream, tbl_Detalles, TRUE, '', TRUE, TRUE); +procedure TRptAlbaranesProveedor._GenerarAlbaran(const AID: Integer); +var + AInforme: Variant; - AInforme := DarRutaFichero(DarRutaInformes, rptInforme); +begin + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + try + tbl_Cabecera.Active := False; + tbl_Detalles.Active := False; + + tbl_Cabecera.ParamByName('ID').AsInteger := AID; + tbl_Detalles.ParamByName('ID_ALBARAN').AsInteger := AID; + + tbl_Cabecera.Active := True; + tbl_Detalles.Active := True; + + AInforme := DarRutaFichero(DarRutaInformes, rptInforme, tbl_Cabecera.FieldByName('ID_EMPRESA').AsString); if VarIsNull(AInforme) then - raise Exception.Create (('Error Servidor: GenerarAlbaran, no encuentra informe ' + rptInforme)); + raise Exception.Create (('Error Servidor: _GenerarFactura, no encuentra informe ' + rptInforme)); frxReport.LoadFromFile(AInforme, True); frxReport.PrepareReport(False); - finally - AStream.Free; - dsMaster := Nil; - dsDetail := Nil; + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" end; end; diff --git a/Source/Modulos/Albaranes de proveedor/Reports/uRptWordAlbaranProveedor.dfm b/Source/Modulos/Albaranes de proveedor/Reports/uRptWordAlbaranProveedor.dfm new file mode 100644 index 00000000..1327fa21 --- /dev/null +++ b/Source/Modulos/Albaranes de proveedor/Reports/uRptWordAlbaranProveedor.dfm @@ -0,0 +1,547 @@ +object RptWordAlbaranProveedor: TRptWordAlbaranProveedor + OldCreateOrder = False + OnCreate = DataModuleCreate + Height = 223 + Width = 337 + object schReport: TDASchema + ConnectionManager = dmServer.ConnectionManager + DataDictionary = DataDictionary + Datasets = < + item + IsPublic = False + Params = < + item + Name = 'ID' + Value = '3' + ParamType = daptInput + end> + Statements = < + item + Connection = 'IBX' + SQL = + 'SELECT'#10' ALBARANES_PROVEEDOR.ID,'#10' ALBARANES_PROVEEDOR.ID_EMPRES' + + 'A,'#10' ALBARANES_PROVEEDOR.TIPO,'#10' ALBARANES_PROVEEDOR.REFERENCIA,' + + #10' ALBARANES_PROVEEDOR.FECHA_ALBARAN,'#10' ALBARANES_PROVEEDOR.OBSE' + + 'RVACIONES,'#10' CONTACTOS.NOMBRE,'#10' COALESCE(CONTACTOS_DIRECCIONES.' + + 'FAX, CONTACTOS.FAX) AS FAX,'#10' ALBARANES_PROVEEDOR.PERSONA_CONTAC' + + 'TO_PROV AS PERSONA_CONTACTO,'#10' PROVEEDORES_DATOS.CODIGO_ASIGNADO' + + ' AS CODIGO_CLIENTE,'#10' ALBARANES_PROVEEDOR.ID_ALMACEN,'#10' COALESCE' + + '(ALMACENES.CALLE, ALBARANES_PROVEEDOR.CALLE) AS CALLE,'#10' COALESC' + + 'E(ALMACENES.POBLACION, ALBARANES_PROVEEDOR.POBLACION) AS POBLACI' + + 'ON,'#10' COALESCE(ALMACENES.PROVINCIA, ALBARANES_PROVEEDOR.PROVINCI' + + 'A) AS PROVINCIA,'#10' COALESCE(ALMACENES.CODIGO_POSTAL, ALBARANES_P' + + 'ROVEEDOR.CODIGO_POSTAL) AS CODIGO_POSTAL,'#10' ALBARANES_PROVEEDOR.' + + 'PERSONA_CONTACTO AS ENTREGAR_A,'#10' ALBARANES_PROVEEDOR.IMPORTE_TO' + + 'TAL'#10'FROM'#10' ALBARANES_PROVEEDOR'#10' INNER JOIN CONTACTOS ON (CONTAC' + + 'TOS.ID = ALBARANES_PROVEEDOR.ID_PROVEEDOR)'#10' LEFT OUTER JOIN PRO' + + 'VEEDORES_DATOS ON (PROVEEDORES_DATOS.ID_PROVEEDOR = ALBARANES_PR' + + 'OVEEDOR.ID_PROVEEDOR)'#10' LEFT OUTER JOIN CONTACTOS_DIRECCIONES ON' + + ' (CONTACTOS_DIRECCIONES.ID = ALBARANES_PROVEEDOR.ID_DIRECCION)'#10' ' + + ' LEFT OUTER JOIN ALMACENES ON (ALMACENES.ID = ALBARANES_PROVEEDO' + + 'R.ID_ALMACEN)'#10'WHERE ALBARANES_PROVEEDOR.ID = :ID'#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ID' + TableField = 'ID' + end + item + DatasetField = 'ID_EMPRESA' + TableField = 'ID_EMPRESA' + end + item + DatasetField = 'REFERENCIA' + TableField = 'REFERENCIA' + end + item + DatasetField = 'OBSERVACIONES' + TableField = 'OBSERVACIONES' + end + item + DatasetField = 'NOMBRE' + TableField = 'NOMBRE' + end + item + DatasetField = 'FAX' + TableField = 'FAX' + end + item + DatasetField = 'PERSONA_CONTACTO' + TableField = 'PERSONA_CONTACTO' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'ID_ALMACEN' + TableField = 'ID_ALMACEN' + end + item + DatasetField = 'CODIGO_CLIENTE' + TableField = 'CODIGO_CLIENTE' + end + item + DatasetField = 'TIPO' + TableField = 'TIPO' + end + item + DatasetField = 'FECHA_ALBARAN' + TableField = 'FECHA_ALBARAN' + end + item + DatasetField = 'CALLE' + TableField = 'CALLE' + end + item + DatasetField = 'POBLACION' + TableField = 'POBLACION' + end + item + DatasetField = 'PROVINCIA' + TableField = 'PROVINCIA' + end + item + DatasetField = 'CODIGO_POSTAL' + TableField = 'CODIGO_POSTAL' + end + item + DatasetField = 'ENTREGAR_A' + TableField = 'ENTREGAR_A' + end> + end> + Name = 'Informe_Cabecera' + Fields = < + item + Name = 'ID' + DataType = datInteger + end + item + Name = 'ID_EMPRESA' + DataType = datInteger + end + item + Name = 'TIPO' + DataType = datString + Size = 1 + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'FECHA_ALBARAN' + DataType = datDateTime + end + item + Name = 'OBSERVACIONES' + DataType = datMemo + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'FAX' + DataType = datString + Size = 25 + end + item + Name = 'PERSONA_CONTACTO' + DataType = datString + Size = 255 + end + item + Name = 'CODIGO_CLIENTE' + DataType = datString + Size = 255 + end + item + Name = 'ID_ALMACEN' + DataType = datInteger + end + item + Name = 'CALLE' + DataType = datString + Size = 255 + end + item + Name = 'POBLACION' + DataType = datString + Size = 255 + end + item + Name = 'PROVINCIA' + DataType = datString + Size = 255 + end + item + Name = 'CODIGO_POSTAL' + DataType = datString + Size = 10 + end + item + Name = 'ENTREGAR_A' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end> + ReadOnly = True + end + item + IsPublic = False + Params = < + item + Name = 'ID_ALBARAN' + Value = '' + ParamType = daptInput + end> + Statements = < + item + Connection = 'IBX' + ConnectionType = 'Interbase' + Default = True + SQL = + 'SELECT DET.ID, DET.ID_ALBARAN,'#10' DET.POSICION, DET.TIPO_DET' + + 'ALLE,'#10' ARTICULOS.REFERENCIA, DET.CONCEPTO, DET.CANTIDAD,'#10' ' + + ' DET.UNIDAD_MEDIDA, DET.IMPORTE_UNIDAD - (DET.IMPORTE_UNIDA' + + 'D * (COALESCE(DET.DESCUENTO,0) / 100)) as IMPORTE_UNIDAD, DET.IM' + + 'PORTE_TOTAL,'#10' ARTICULOS_PROVEEDORES.REFERENCIA_PROV as REF' + + 'ERENCIA_PROVEEDOR,'#10' ARTICULOS.REFERENCIA_FABR as REFERENCI' + + 'A_FABRICANTE'#10'FROM ALBARANES_PROVEEDOR_DETALLES DET'#10'LEFT OUTER JO' + + 'IN ARTICULOS ON (DET.ID_ARTICULO = ARTICULOS.ID)'#10'LEFT JOIN ALBAR' + + 'ANES_PROVEEDOR ON (ALBARANES_PROVEEDOR.ID = DET.ID_ALBARAN)'#10'LEFT' + + ' JOIN ARTICULOS_PROVEEDORES ON ((ARTICULOS_PROVEEDORES.ID_ARTICU' + + 'LO = ARTICULOS.ID) AND (ARTICULOS_PROVEEDORES.ID_PROVEEDOR = ALB' + + 'ARANES_PROVEEDOR.ID_PROVEEDOR))'#10'WHERE DET.ID_ALBARAN = :ID_ALBAR' + + 'AN AND DET.VISIBLE = 1 AND {Where}'#10'ORDER BY DET.ID_ALBARAN, DET.' + + 'POSICION;'#10#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ID' + TableField = 'ID' + end + item + DatasetField = 'ID_ALBARAN' + TableField = 'ID_ALBARAN' + end + item + DatasetField = 'POSICION' + TableField = 'POSICION' + end + item + DatasetField = 'TIPO_DETALLE' + TableField = 'TIPO_DETALLE' + end + item + DatasetField = 'REFERENCIA' + TableField = 'REFERENCIA' + end + item + DatasetField = 'CONCEPTO' + TableField = 'CONCEPTO' + end + item + DatasetField = 'CANTIDAD' + TableField = 'CANTIDAD' + end + item + DatasetField = 'UNIDAD_MEDIDA' + TableField = 'UNIDAD_MEDIDA' + end + item + DatasetField = 'IMPORTE_UNIDAD' + TableField = 'IMPORTE_UNIDAD' + end + item + DatasetField = 'IMPORTE_TOTAL' + TableField = 'IMPORTE_TOTAL' + end + item + DatasetField = 'REFERENCIA_PROVEEDOR' + TableField = 'REFERENCIA_PROVEEDOR' + end + item + DatasetField = 'REFERENCIA_FABRICANTE' + TableField = 'REFERENCIA_FABRICANTE' + end> + end> + Name = 'Informe_Detalles' + Fields = < + item + Name = 'ID' + DataType = datInteger + end + item + Name = 'ID_ALBARAN' + DataType = datInteger + end + item + Name = 'POSICION' + DataType = datInteger + end + item + Name = 'TIPO_DETALLE' + DataType = datString + Size = 25 + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'CONCEPTO' + DataType = datString + Size = 2000 + end + item + Name = 'CANTIDAD' + DataType = datFloat + end + item + Name = 'UNIDAD_MEDIDA' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_UNIDAD' + DataType = datFloat + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'REFERENCIA_PROVEEDOR' + DataType = datString + Size = 255 + end + item + Name = 'REFERENCIA_FABRICANTE' + DataType = datString + Size = 255 + end> + ReadOnly = True + end> + JoinDataTables = <> + UnionDataTables = <> + Commands = <> + RelationShips = <> + UpdateRules = <> + Version = 0 + Left = 48 + Top = 16 + end + object DataDictionary: TDADataDictionary + Fields = <> + Left = 46 + Top = 142 + end + object DABin2DataStreamer: TDABin2DataStreamer + Left = 48 + Top = 80 + end + object tbl_Cabecera: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ID' + DataType = datInteger + end + item + Name = 'ID_EMPRESA' + DataType = datInteger + end + item + Name = 'TIPO' + DataType = datString + Size = 1 + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'FECHA_ALBARAN' + DataType = datDateTime + end + item + Name = 'OBSERVACIONES' + DataType = datMemo + end + item + Name = 'NOMBRE' + DataType = datString + Size = 255 + end + item + Name = 'FAX' + DataType = datString + Size = 25 + end + item + Name = 'PERSONA_CONTACTO' + DataType = datString + Size = 255 + end + item + Name = 'CODIGO_CLIENTE' + DataType = datString + Size = 255 + end + item + Name = 'ID_ALMACEN' + DataType = datInteger + end + item + Name = 'CALLE' + DataType = datString + Size = 255 + end + item + Name = 'POBLACION' + DataType = datString + Size = 255 + end + item + Name = 'PROVINCIA' + DataType = datString + Size = 255 + end + item + Name = 'CODIGO_POSTAL' + DataType = datString + Size = 10 + end + item + Name = 'ENTREGAR_A' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end> + Params = < + item + Name = 'ID' + Value = '3' + ParamType = daptInput + end> + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = DABin2DataStreamer + DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] + MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] + LogicalName = 'Informe_Cabecera' + IndexDefs = <> + Left = 168 + Top = 16 + end + object tbl_Detalles: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ID' + DataType = datInteger + end + item + Name = 'ID_ALBARAN' + DataType = datInteger + end + item + Name = 'POSICION' + DataType = datInteger + end + item + Name = 'TIPO_DETALLE' + DataType = datString + Size = 25 + end + item + Name = 'REFERENCIA' + DataType = datString + Size = 255 + end + item + Name = 'CONCEPTO' + DataType = datString + Size = 2000 + end + item + Name = 'CANTIDAD' + DataType = datFloat + end + item + Name = 'UNIDAD_MEDIDA' + DataType = datString + Size = 255 + end + item + Name = 'IMPORTE_UNIDAD' + DataType = datFloat + end + item + Name = 'IMPORTE_TOTAL' + DataType = datCurrency + end + item + Name = 'REFERENCIA_PROVEEDOR' + DataType = datString + Size = 255 + end + item + Name = 'REFERENCIA_FABRICANTE' + DataType = datString + Size = 255 + end> + Params = < + item + Name = 'ID_ALBARAN' + Value = '' + ParamType = daptInput + end> + MasterParamsMappings.Strings = ( + 'ID_PRESUPUESTO=ID_PRESUPUESTO') + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + LocalSchema = schReport + LocalDataStreamer = DABin2DataStreamer + DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] + MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] + LogicalName = 'Informe_Detalles' + IndexDefs = <> + Left = 264 + Top = 16 + end + object tbl_Empresa: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = <> + Params = < + item + Name = 'ID' + Value = '31' + ParamType = daptInput + end> + LogChanges = False + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteFetchEnabled = False + DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] + MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] + LogicalName = 'Empresa' + IndexDefs = <> + Left = 168 + Top = 80 + end +end diff --git a/Source/Modulos/Albaranes de proveedor/Reports/uRptWordAlbaranProveedor.pas b/Source/Modulos/Albaranes de proveedor/Reports/uRptWordAlbaranProveedor.pas new file mode 100644 index 00000000..a6cdc24c --- /dev/null +++ b/Source/Modulos/Albaranes de proveedor/Reports/uRptWordAlbaranProveedor.pas @@ -0,0 +1,268 @@ +unit uRptWordAlbaranProveedor; + +interface + +uses + SysUtils, Classes, AHWord97, IB, IBCustomDataSet, IBDatabase, + Word2000, uDAInterfaces, uDADataStreamer, uDABin2DataStreamer, uDAClasses, + uDAScriptingProvider, uDADataTable, uDAMemDataTable; + +type + TRptWordAlbaranProveedor = class(TDataModule) + DABin2DataStreamer: TDABin2DataStreamer; + tbl_Cabecera: TDAMemDataTable; + tbl_Detalles: TDAMemDataTable; + tbl_Empresa: TDAMemDataTable; + schReport: TDASchema; + DataDictionary: TDADataDictionary; + procedure DataModuleCreate(Sender: TObject); + private + FConnection: IDAConnection; + FPlantilla : string; + FWordApp : TWordApp; + FDocumento : TWordDoc; + FCodigoAlbaran : string; + FNombreFichero : String; + + function Generar : Boolean; + function RellenarDatosAlbaran : Boolean; + function RellenarDatosDetalle : Boolean; + procedure _GenerarAlbaran(const AID: String); + public + function Exportar(Codigo, Fichero : String): Boolean; + constructor Create (AOwner : TComponent); override; + destructor Destroy; override; + end; + +implementation + +{ TRptWordAlbaranProveedor } + +{$R *.dfm} + +uses + Windows, Variants, Dialogs, uDataModuleServer, uStringsUtils, uSistemaFunc, + srvEmpresas_Impl, uROTypes, uROClasses; + +const + rptInforme = 'AlbaranProveedor.rdx'; + +constructor TRptWordAlbaranProveedor.Create(AOwner: TComponent); +begin + inherited; + FDocumento := NIL; +end; + +destructor TRptWordAlbaranProveedor.Destroy; +begin + if FDocumento <> NIL then + FDocumento.Free; + FDocumento := NIL; + inherited; +end; + +function TRptWordAlbaranProveedor.Exportar(Codigo, Fichero: String): Boolean; +begin + if EsCadenaVacia(Fichero) then + begin + Result := False; + raise Exception.Create('Falta indicar el fichero donde se exportará el listado.'); + end; + + FNombreFichero := Fichero; + FCodigoAlbaran := Codigo; + _GenerarAlbaran(Codigo); + Result := True; +end; + +procedure TRptWordAlbaranProveedor.DataModuleCreate(Sender: TObject); +begin + schReport.ConnectionManager := dmServer.ConnectionManager; + FConnection := dmServer.DarNuevaConexion; +end; + +function TRptWordAlbaranProveedor.Generar : Boolean; +var + Aux : OleVariant; +begin + FWordApp := TWordApp.Create (False, False); + with FWordApp do + begin + Visible := False; + ScreenUpdating := False; + end; + + FDocumento := TWordDoc.CreateNewDoc(FWordApp, FPlantilla); + FWordApp.SaveActiveDocAs(FNombreFichero); + try + if not RellenarDatosAlbaran then + RaiseError('Se producido un error al generar la cabecera en MS Word.'); + + if not RellenarDatosDetalle then + RaiseError('Se producido un error al generar el informe en MS Word.'); + + FWordApp.CloseApp(wdSaveChanges); + Result := True; + finally + FDocumento := NIL; + FWordApp := NIL; + end; +end; + + +function TRptWordAlbaranProveedor.RellenarDatosDetalle : Boolean; +var + numRows, numCols, mergesplit : OleVariant; + MaxCols, iRowCount : Integer; +begin + iRowCount := 2; + numrows := 2; + numcols := 1; + mergeSplit := False; + MaxCols := 12; + + with FDocumento.Document.Tables.Item(1), tbl_Detalles do + begin + tbl_Detalles.First; + while not tbl_Detalles.EOF do + begin + Rows.Item (iRowCount).Cells.Split (numRows, numCols, mergesplit); + + Cell(iRowCount, 1).Range.Text := FieldByName('REFERENCIA_PROVEEDOR').AsString; + + Cell(iRowCount, 2).Range.Text := FieldByName('REFERENCIA_FABRICANTE').AsString; + Cell(iRowCount, 3).Range.Text := FieldByName('CONCEPTO').AsString; + Cell(iRowCount, 4).Range.Text := FieldByName('CANTIDAD').AsString + ' ' + FieldByName('UNIDAD_MEDIDA').AsString; + + Cell(iRowCount, 5).Range.Text := FormatFloat(DISPLAY_EUROS2, FieldByName('IMPORTE_UNIDAD').AsFloat); + Cell(iRowCount, 6).Range.Text := FormatFloat(DISPLAY_EUROS2, FieldByName('IMPORTE_TOTAL').AsFloat); + Next; + Inc (iRowCount); + end; + + Rows.Item(iRowCount).Delete; + + {while iRowCount <= MaxCols do + begin + Rows.Item (iRowCount).Cells.Split (numRows, numCols, mergesplit); + inc (iRowCount); + end;} + end; + Result := True; +end; + +function TRptWordAlbaranProveedor.RellenarDatosAlbaran : Boolean; +var + DireccionEntrega, FicheroTemporal : String; + LinkToFile, SaveWithDocument, _Range : OleVariant; + Imagen : InlineShape; + +begin + + //PARA DIBUJAR EL LOGOTIPO MULTIEMPRESA + {if (EmpresaActiva.Logotipo <> Nil) then + begin + //Activamos cabecera + FWordApp.Application.ActiveWindow.ActivePane.View.SeekView := wdSeekCurrentPageHeader; + LinkToFile := False; + SaveWithDocument := True; + _Range := EmptyParam; + FicheroTemporal := DarFicheroTemporal; + EmpresaActiva.Logotipo.SaveToFile (FicheroTemporal); + Imagen := FWordApp.Application.ActiveWindow.ActivePane.Selection.InlineShapes.AddPicture(ficherotemporal, LinkToFile, SaveWithDocument, _Range); + + //Formateamos imagen + if ((Imagen.Get_Width > ANCHO_LOGO_INF)) then + begin + Imagen.Set_Height(((ANCHO_LOGO_INF * Imagen.Get_Height) /Imagen.Get_Width)); + Imagen.Set_Width(ANCHO_LOGO_INF); + end; + end;} + + with FDocumento, tbl_Cabecera do + begin + if FieldByName('TIPO').AsString = 'D' then + ReplaceBookmark('TituloDocumento', 'ORDEN DE DEVOLUCIÓN'); + + + ReplaceBookmark('CodigoAlbaran', FieldByName('REFERENCIA').AsString); + ReplaceBookmark('FechaAlbaran', FieldByName('FECHA_ALBARAN').AsString); + + // En la dirección mostrar aquellos campos que estén rellenos. + DireccionEntrega := ''; + if not EsCadenaVacia(FieldByName('CALLE').AsString) then + DireccionEntrega := DireccionEntrega + FieldByName('CALLE').AsString; + if not EsCadenaVacia(FieldByName('CODIGO_POSTAL').AsString) then + DireccionEntrega := DireccionEntrega + ', ' + FieldByName('CODIGO_POSTAL').AsString; + if not EsCadenaVacia(FieldByName('POBLACION').AsString) then + DireccionEntrega := DireccionEntrega + ', ' + FieldByName('POBLACION').AsString; + if not EsCadenaVacia(FieldByName('PROVINCIA').AsString) then + DireccionEntrega := DireccionEntrega + ', ' + FieldByName('PROVINCIA').AsString; + ReplaceBookmark('LugarEntrega', DireccionEntrega); + + { ReplaceBookmark('LugarEntrega', FieldByName('CALLEALMACEN').AsString + ' ' + + FieldByName('NUMEROALMACEN').AsString + ', ' + FieldByName('PISOALMACEN').AsString + ', ' + + FieldByName('CODIGOPOSTALALMACEN').AsString + ' ' + FieldByName('POBLACIONALMACEN').AsString + ', ' + FieldByName('PROVINCIAALMACEN').AsString);} + +// ReplaceBookmark('PersonaEntrega', FieldByName('ENTREGAR_A').AsString); + +{ if FieldByName('FECHA_ENTREGA').IsNull then + ReplaceBookmark('FechaEntrega', '') + else + ReplaceBookmark('FechaEntrega', 'FECHA DE ENTREGA PREVISTA: ' + FieldByName('FECHA_ENTREGA').AsString);} + + ReplaceBookmark('NombreProveedor', FieldByName('NOMBRE').AsString); + ReplaceBookmark('FaxProveedor', FieldByName('FAX').AsString); + ReplaceBookmark('PersonaContactoProveedor', FieldByName('PERSONA_CONTACTO').AsString); + ReplaceBookmark('CodigoClienteProveedor', FieldByName('CODIGO_CLIENTE').AsString); + + ReplaceBookmark('ImporteTotal', FormatFloat(DISPLAY_EUROS2, FieldByName('IMPORTE_TOTAL').AsFloat)); + + ReplaceBookmark('NotasAlbaran', FieldByName('OBSERVACIONES').AsString); + + ReplaceBookmark('NombreEmpresa', tbl_Empresa.FieldByName('NOMBRE').AsString); + ReplaceBookmark('NombreEmpresa2', tbl_Empresa.FieldByName('NOMBRE').AsString); + ReplaceBookmark('CifEmpresa', tbl_Empresa.FieldByName('NIF_CIF').AsString); + ReplaceBookmark('DireccionEmpresa', + Format('%s. %s %s', [tbl_Empresa.FieldByName('CALLE').AsString, + tbl_Empresa.FieldByName('CODIGO_POSTAL').AsString, tbl_Empresa.FieldByName('POBLACION').AsString])); + ReplaceBookmark('TelefonoEmpresa', tbl_Empresa.FieldByName('TELEFONO_1').AsString); + ReplaceBookmark('FaxEmpresa', tbl_Empresa.FieldByName('FAX').AsString); + ReplaceBookmark('CorreoEmpresa', tbl_Empresa.FieldByName('EMAIL_1').AsString); + end; + Result := True; +end; + +procedure TRptWordAlbaranProveedor._GenerarAlbaran(const AID: String); +var + ACopiaPlantilla : String; +begin + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + try + tbl_Cabecera.ParamByName('ID').AsString := AID; + tbl_Detalles.ParamByName('ID_ALBARAN').AsString := AID; + + tbl_Cabecera.Active := True; + tbl_Detalles.Active := True; + + FPlantilla := DarRutaInformes + tbl_Cabecera.FieldByName('ID_EMPRESA').AsString + '\' + rptInforme; + FCodigoAlbaran := AID; + + if RecuperarEmpresa(tbl_Cabecera.FieldByName('ID_EMPRESA').AsInteger, tbl_Empresa) then + begin + ACopiaPlantilla := DarFicheroTemporal; + CopiarFichero(FPlantilla, ACopiaPlantilla); + FPlantilla := ACopiaPlantilla; + try + Generar; + finally + SysUtils.DeleteFile(ACopiaPlantilla); + end; + end; + finally + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + end; +end; + + +end. diff --git a/Source/Modulos/Albaranes de proveedor/Servidor/srvAlbaranesProveedor_Impl.pas b/Source/Modulos/Albaranes de proveedor/Servidor/srvAlbaranesProveedor_Impl.pas index 3fffff9b..b53fdb8f 100644 --- a/Source/Modulos/Albaranes de proveedor/Servidor/srvAlbaranesProveedor_Impl.pas +++ b/Source/Modulos/Albaranes de proveedor/Servidor/srvAlbaranesProveedor_Impl.pas @@ -31,8 +31,14 @@ type procedure DARemoteServiceCreate(Sender: TObject); procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject; var aConnectionName: string); + protected + function GenerarInforme(const ListaID: TIntegerArray): Binary; + function GenerarInformeEnWord(const ID: Integer): Binary; + function GenerarInformeEnPDF(const ListaID: TIntegerArray): Binary; end; + + implementation {$R *.dfm} @@ -40,8 +46,8 @@ uses Dialogs, {Generated:} FactuGES_Invk, uDataModuleServer, uDatabaseUtils, schAlbaranesProveedorClient_Intf, uRestriccionesUsuarioUtils, - uBizAlbaranProveedorServer; -// uRptAlbaranesProveedor_Server; + uBizAlbaranProveedorServer, uRptAlbaranesProveedor_Server, + uRptWordAlbaranProveedor, uSistemaFunc; procedure Create_srvAlbaranesProveedor(out anInstance : IUnknown); begin @@ -75,6 +81,52 @@ begin ConnectionName := dmServer.ConnectionName; end; +function TsrvAlbaranesProveedor.GenerarInforme( + const ListaID: TIntegerArray): Binary; +var + AReportGenerator : TRptAlbaranesProveedor; +begin + AReportGenerator := TRptAlbaranesProveedor.Create(nil); + try + Result := AReportGenerator.GenerarAlbaran(ListaID); + finally + FreeAndNIL(AReportGenerator); + end; +end; + +function TsrvAlbaranesProveedor.GenerarInformeEnPDF( + const ListaID: TIntegerArray): Binary; +var + AReportGenerator : TRptAlbaranesProveedor; +begin + AReportGenerator := TRptAlbaranesProveedor.Create(nil); + try + Result := AReportGenerator.GenerarAlbaranEnPDF(ListaID); + finally + FreeAndNIL(AReportGenerator); + end; +end; + +function TsrvAlbaranesProveedor.GenerarInformeEnWord(const ID: Integer): Binary; +var + AReportGenerator : TRptWordAlbaranProveedor; + AFicheroTMP : TFileName; +begin + Result := NIL; + AFicheroTMP := DarFicheroTemporal; + AReportGenerator := TRptWordAlbaranProveedor.Create(nil); + try + if AReportGenerator.Exportar(IntToStr(ID), AFicheroTMP) then + begin + Result := Binary.Create; + Result.LoadFromFile(AFicheroTMP); + SysUtils.DeleteFile(AFicheroTMP) + end; + finally + FreeAndNIL(AReportGenerator); + end; +end; + initialization TROClassFactory.Create('srvAlbaranesProveedor', Create_srvAlbaranesProveedor, TsrvAlbaranesProveedor_Invoker); diff --git a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranDevProveedor.dfm b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranDevProveedor.dfm index 1a5f4d09..5b7f7132 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranDevProveedor.dfm +++ b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranDevProveedor.dfm @@ -38,8 +38,50 @@ inherited fEditorAlbaranDevProveedor: TfEditorAlbaranDevProveedor inherited pgPaginas: TPageControl inherited pagContenido: TTabSheet inherited frViewDetallesAlbaranProveedor1: TfrViewDetallesAlbaranProveedor + inherited ToolBar1: TToolBar + inherited UpDown1: TUpDown [7] + Left = 666 + Top = 0 + ExplicitLeft = 666 + ExplicitTop = 0 + end + inherited ToolButton13: TToolButton [8] + end + inherited ToolButton6: TToolButton + Left = 0 + ExplicitLeft = 0 + end + inherited ToolButton7: TToolButton + Left = 66 + ExplicitLeft = 66 + end + inherited ToolButton8: TToolButton + Left = 133 + ExplicitLeft = 133 + end + inherited ToolButton12: TToolButton + Left = 216 + ExplicitLeft = 216 + end + inherited ToolButton9: TToolButton + Left = 224 + ExplicitLeft = 224 + end + inherited ToolButton10: TToolButton + Left = 369 + ExplicitLeft = 369 + end + inherited ToolButton11: TToolButton + Left = 494 + ExplicitLeft = 494 + end + end inherited cxGrid: TcxGrid - ExplicitTop = 72 + ExplicitTop = 99 + ExplicitHeight = 345 + end + inherited TBXDock1: TTBXDock + ExplicitTop = 73 end inherited cxGridPopupMenu: TcxGridPopupMenu PopupMenus = < @@ -68,26 +110,12 @@ inherited fEditorAlbaranDevProveedor: TfEditorAlbaranDevProveedor inherited frViewTotales1: TfrViewTotales inherited dxLayoutControl1: TdxLayoutControl LookAndFeel = dxLayoutOfficeLookAndFeel1 - inherited Bevel1: TBevel - Width = 73 - ExplicitWidth = 73 - end - inherited Bevel3: TBevel - Height = 30 - ExplicitHeight = 30 - end - inherited Bevel4: TBevel - Width = 21 - ExplicitWidth = 21 - end inherited ImporteDto: TcxDBCurrencyEdit Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitWidth = 199 - Width = 199 end inherited ImporteIVA: TcxDBCurrencyEdit Style.LookAndFeel.SkinName = '' @@ -95,8 +123,6 @@ inherited fEditorAlbaranDevProveedor: TfEditorAlbaranDevProveedor StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitWidth = 192 - Width = 192 end inherited ImporteTotal: TcxDBCurrencyEdit Style.LookAndFeel.SkinName = '' @@ -104,8 +130,6 @@ inherited fEditorAlbaranDevProveedor: TfEditorAlbaranDevProveedor StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitWidth = 262 - Width = 262 end inherited edtDescuento: TcxDBSpinEdit Style.LookAndFeel.SkinName = '' @@ -127,8 +151,6 @@ inherited fEditorAlbaranDevProveedor: TfEditorAlbaranDevProveedor StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitWidth = 263 - Width = 263 end inherited edtRE: TcxDBSpinEdit Style.LookAndFeel.SkinName = '' @@ -143,8 +165,6 @@ inherited fEditorAlbaranDevProveedor: TfEditorAlbaranDevProveedor StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitWidth = 192 - Width = 192 end inherited eImporteNeto: TcxDBCurrencyEdit Style.LookAndFeel.SkinName = '' @@ -152,8 +172,6 @@ inherited fEditorAlbaranDevProveedor: TfEditorAlbaranDevProveedor StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitWidth = 270 - Width = 270 end inherited ePorte: TcxDBCurrencyEdit Style.LookAndFeel.SkinName = '' @@ -161,24 +179,18 @@ inherited fEditorAlbaranDevProveedor: TfEditorAlbaranDevProveedor StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitWidth = 270 - Width = 270 end inherited eIVA: TcxDBLookupComboBox Style.LookAndFeel.SkinName = '' StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitWidth = 132 - Width = 132 end inherited cbRecargoEquivalencia: TcxDBCheckBox Style.LookAndFeel.SkinName = '' StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitWidth = 270 - Width = 270 end inherited edtRetencion: TcxDBSpinEdit Style.LookAndFeel.SkinName = '' diff --git a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.dfm b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.dfm index 01901282..a8c13124 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.dfm +++ b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.dfm @@ -5,7 +5,6 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor ClientHeight = 619 ClientWidth = 765 OnClose = CustomEditorClose - ExplicitTop = -105 ExplicitWidth = 773 ExplicitHeight = 653 PixelsPerInch = 96 @@ -134,7 +133,7 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor Width = 765 ExplicitWidth = 765 inherited tbxMain: TTBXToolbar - ExplicitWidth = 330 + ExplicitWidth = 488 inherited TBXItem2: TTBXItem Visible = False end @@ -155,17 +154,16 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor TabOrder = 1 OnChanging = pgPaginasChanging ExplicitWidth = 759 - ExplicitHeight = 454 + ExplicitHeight = 472 inherited pagGeneral: TTabSheet ExplicitLeft = 4 ExplicitTop = 24 ExplicitWidth = 751 - ExplicitHeight = 426 + ExplicitHeight = 444 end object pagContenido: TTabSheet Caption = 'Contenido' ImageIndex = 1 - ExplicitHeight = 426 inline frViewDetallesAlbaranProveedor1: TfrViewDetallesAlbaranProveedor Left = 0 Top = 0 @@ -183,7 +181,7 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor TabOrder = 0 ReadOnly = False ExplicitWidth = 751 - ExplicitHeight = 426 + ExplicitHeight = 444 inherited ToolBar1: TToolBar Width = 751 Height = 51 @@ -214,10 +212,10 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor inherited FontSize: TEdit Left = 544 Top = 0 - Width = 106 + Width = 122 ExplicitLeft = 544 ExplicitTop = 0 - ExplicitWidth = 106 + ExplicitWidth = 122 end inherited ToolButton13: TToolButton [7] Left = 0 @@ -282,7 +280,7 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor Height = 367 ExplicitTop = 77 ExplicitWidth = 751 - ExplicitHeight = 349 + ExplicitHeight = 367 end inherited TBXDock1: TTBXDock Top = 51 @@ -307,7 +305,6 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor object pagInicidencias: TTabSheet Caption = 'Incidencias' ImageIndex = 2 - ExplicitHeight = 426 inline frViewIncidenciasCli: TfrViewIncidencias Left = 0 Top = 0 @@ -323,7 +320,7 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor TabOrder = 0 ReadOnly = False ExplicitWidth = 751 - ExplicitHeight = 426 + ExplicitHeight = 444 inherited pnlSup: TPanel Width = 751 ExplicitWidth = 751 @@ -335,10 +332,10 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor Width = 751 Height = 416 ExplicitWidth = 751 - ExplicitHeight = 398 + ExplicitHeight = 416 inherited eIncidencias: TcxDBMemo ExplicitWidth = 734 - ExplicitHeight = 371 + ExplicitHeight = 389 Height = 389 Width = 734 end @@ -353,8 +350,7 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor item Width = 200 end> - ExplicitLeft = 8 - ExplicitTop = 601 + ExplicitTop = 600 ExplicitWidth = 765 end inline frViewTotales1: TfrViewTotales [4] @@ -371,7 +367,7 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor ParentFont = False TabOrder = 4 ReadOnly = False - ExplicitTop = 573 + ExplicitTop = 554 ExplicitWidth = 765 ExplicitHeight = 46 inherited dxLayoutControl1: TdxLayoutControl @@ -379,7 +375,7 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor Height = 46 LookAndFeel = dxLayoutOfficeLookAndFeel1 ExplicitWidth = 765 - ExplicitHeight = 64 + ExplicitHeight = 46 inherited Bevel3: TBevel Left = 425 Top = 11 @@ -663,14 +659,6 @@ inherited fEditorAlbaranProveedor: TfEditorAlbaranProveedor inherited actConfPagina: TAction Visible = False end - inherited actPrevisualizar: TAction - Enabled = False - Visible = False - end - inherited actImprimir: TAction - Enabled = False - Visible = False - end end inherited SmallImages: TPngImageList [6] end diff --git a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.pas b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.pas index d1f483fd..08ad4612 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.pas +++ b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.pas @@ -216,12 +216,12 @@ begin end; procedure TfEditorAlbaranProveedor.ImprimirInterno; +var + AllItems: Boolean; begin -AppFactuGES.ShowCapado; -{ inherited; - FController.Print(FAlbaran); -} + AllItems := False; + FController.Print(FAlbaran, AllItems); end; procedure TfEditorAlbaranProveedor.OnProveedorChanged(Sender: TObject); @@ -268,12 +268,12 @@ begin end; procedure TfEditorAlbaranProveedor.PrevisualizarInterno; +var + AllItems: Boolean; begin -AppFactuGES.ShowCapado; -{ inherited; - FController.Preview(FAlbaran); -} + AllItems := False; + FController.Preview(FAlbaran, AllItems); end; procedure TfEditorAlbaranProveedor.RecalcularPortePorUnidad; diff --git a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.dfm b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.dfm index c4a0dbad..15d367b6 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.dfm +++ b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.dfm @@ -2,7 +2,6 @@ inherited fEditorAlbaranesProveedor: TfEditorAlbaranesProveedor Caption = 'Lista de albaranes de proveedor' ClientWidth = 606 ExplicitWidth = 614 - ExplicitHeight = 240 PixelsPerInch = 96 TextHeight = 13 inherited JvNavPanelHeader: TJvNavPanelHeader diff --git a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.pas b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.pas index fa17487f..7c794dd0 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.pas +++ b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.pas @@ -197,14 +197,11 @@ begin end; procedure TfEditorAlbaranesProveedor.ImprimirInterno; -{var +var Respuesta : Integer; AAlbaranes: IBizAlbaranProveedor; AllItems: Boolean; -} begin - inherited; -{ AAlbaranes := Nil; AllItems := False; @@ -212,7 +209,7 @@ begin AllItems := (ViewGrid.NumSeleccionados > 1); //Si esta agrupado solo podré imprimir la lista de elementos visibles - if not ViewGrid.esSeleccionCeldaDatos then + if not ViewGrid.EsSeleccionCeldaDatos then inherited else begin @@ -238,7 +235,6 @@ begin end; end; end; -} end; function TfEditorAlbaranesProveedor.GetAlbaranes: IBizAlbaranProveedor; @@ -285,13 +281,11 @@ begin end; procedure TfEditorAlbaranesProveedor.PrevisualizarInterno; -{var +var Respuesta : Integer; AAlbaranes: IBizAlbaranProveedor; - AllItems: Boolean;} + AllItems: Boolean; begin - inherited; -{ AAlbaranes := Nil; AllItems := False; @@ -299,7 +293,7 @@ begin AllItems := (ViewGrid.NumSeleccionados > 1); //Si esta agrupado solo podré imprimir la lista de elementos visibles - if not ViewGrid.esSeleccionCeldaDatos then + if not ViewGrid.EsSeleccionCeldaDatos then inherited else begin @@ -325,7 +319,6 @@ begin end; end; end; -} end; procedure TfEditorAlbaranesProveedor.SetController(const Value: IAlbaranesProveedorController); diff --git a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedorReport.dfm b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedorReport.dfm index bb2e7869..b4313f98 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedorReport.dfm +++ b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedorReport.dfm @@ -1,12 +1,14 @@ inherited fEditorAlbaranesProveedorPreview: TfEditorAlbaranesProveedorPreview Caption = 'Previsualizar el albar'#225'n de proveedor' - ExplicitWidth = 320 - ExplicitHeight = 240 PixelsPerInch = 96 TextHeight = 13 - inherited frxReport1: TfrxReport - Datasets = <> - Variables = <> - Style = <> + inherited TBXDock: TTBXDock + inherited TBXToolbar1: TTBXToolbar + ExplicitWidth = 540 + object TBXItem58: TTBXItem [1] + Action = actExportarRTF + Images = SmallImages + end + end end end diff --git a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedorReport.pas b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedorReport.pas index dfd52dfd..97fa02d2 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedorReport.pas +++ b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedorReport.pas @@ -9,14 +9,36 @@ uses TB2ExtItems, TBXExtItems, TBX, TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls, JvExControls, JvComponent, JvNavigationPane, uIEditorAlbaranesProveedorPreview, JvExComCtrls, JvStatusBar, frxExportImage, frxExportPDF, frxDCtrl, frxClass, - frxDMPExport, frxGradient, frxChBox, frxCross, frxRich, frxOLE, frxBarcode; + frxDMPExport, frxGradient, frxChBox, frxCross, frxRich, frxOLE, frxBarcode, + frxExportText, frxExportRTF, frxExportMail, frxExportXLS; type TfEditorAlbaranesProveedorPreview = class(TfEditorPreview, IEditorAlbaranesProveedorPreview) + TBXItem58: TTBXItem; + procedure actExportarRTFExecute(Sender: TObject); end; implementation {$R *.dfm} +uses + uAlbaranesProveedorReportController, uDialogUtils; + +procedure TfEditorAlbaranesProveedorPreview.actExportarRTFExecute( + Sender: TObject); +var + I: Integer; +begin + // inherited; <- No llamar al padre + if not Assigned(Controller) then + raise Exception.Create('No se ha asignado el controlador necesario'); + + for I := 0 to ListaID.Count - 1 do + (Controller as IAlbaranesProveedorReportController).ExportToWord(ListaID[I], ''); + + ShowInfoMessage('El pedido se ha exportado correctamente.'); + +end; + end. diff --git a/Source/Servicios/FactuGES.RODL b/Source/Servicios/FactuGES.RODL index 0fa9295e..63b01073 100644 --- a/Source/Servicios/FactuGES.RODL +++ b/Source/Servicios/FactuGES.RODL @@ -412,6 +412,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Servicios/FactuGES_Intf.pas b/Source/Servicios/FactuGES_Intf.pas index 4dbf6b58..57d017fe 100644 --- a/Source/Servicios/FactuGES_Intf.pas +++ b/Source/Servicios/FactuGES_Intf.pas @@ -613,6 +613,9 @@ type { IsrvAlbaranesProveedor } IsrvAlbaranesProveedor = interface(IDataAbstractService) ['{66B71884-5CE4-4574-B825-60CDA956B628}'] + function GenerarInforme(const ListaID: TIntegerArray): Binary; + function GenerarInformeEnWord(const ID: Integer): Binary; + function GenerarInformeEnPDF(const ListaID: TIntegerArray): Binary; end; { CosrvAlbaranesProveedor } @@ -625,6 +628,9 @@ type protected function __GetInterfaceName:string; override; + function GenerarInforme(const ListaID: TIntegerArray): Binary; + function GenerarInformeEnWord(const ID: Integer): Binary; + function GenerarInformeEnPDF(const ListaID: TIntegerArray): Binary; end; { IsrvReferencias } @@ -1964,11 +1970,64 @@ begin result := TsrvAlbaranesProveedor_Proxy.Create(aMessage, aTransportChannel); end; +{ TsrvAlbaranesProveedor_Proxy } + function TsrvAlbaranesProveedor_Proxy.__GetInterfaceName:string; begin result := 'srvAlbaranesProveedor'; end; +function TsrvAlbaranesProveedor_Proxy.GenerarInforme(const ListaID: TIntegerArray): Binary; +begin + try + result := nil; + __Message.InitializeRequestMessage(__TransportChannel, 'FactuGES', __InterfaceName, 'GenerarInforme'); + __Message.Write('ListaID', TypeInfo(FactuGES_Intf.TIntegerArray), ListaID, []); + __Message.Finalize; + + __TransportChannel.Dispatch(__Message); + + __Message.Read('Result', TypeInfo(Binary), result, []); + finally + __Message.UnsetAttributes(__TransportChannel); + __Message.FreeStream; + end +end; + +function TsrvAlbaranesProveedor_Proxy.GenerarInformeEnWord(const ID: Integer): Binary; +begin + try + result := nil; + __Message.InitializeRequestMessage(__TransportChannel, 'FactuGES', __InterfaceName, 'GenerarInformeEnWord'); + __Message.Write('ID', TypeInfo(Integer), ID, []); + __Message.Finalize; + + __TransportChannel.Dispatch(__Message); + + __Message.Read('Result', TypeInfo(Binary), result, []); + finally + __Message.UnsetAttributes(__TransportChannel); + __Message.FreeStream; + end +end; + +function TsrvAlbaranesProveedor_Proxy.GenerarInformeEnPDF(const ListaID: TIntegerArray): Binary; +begin + try + result := nil; + __Message.InitializeRequestMessage(__TransportChannel, 'FactuGES', __InterfaceName, 'GenerarInformeEnPDF'); + __Message.Write('ListaID', TypeInfo(FactuGES_Intf.TIntegerArray), ListaID, []); + __Message.Finalize; + + __TransportChannel.Dispatch(__Message); + + __Message.Read('Result', TypeInfo(Binary), result, []); + finally + __Message.UnsetAttributes(__TransportChannel); + __Message.FreeStream; + end +end; + { CosrvReferencias } class function CosrvReferencias.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IsrvReferencias; diff --git a/Source/Servicios/FactuGES_Invk.pas b/Source/Servicios/FactuGES_Invk.pas index 6a74aa54..d67343c7 100644 --- a/Source/Servicios/FactuGES_Invk.pas +++ b/Source/Servicios/FactuGES_Invk.pas @@ -177,6 +177,9 @@ type private protected published + procedure Invoke_GenerarInforme(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); + procedure Invoke_GenerarInformeEnWord(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); + procedure Invoke_GenerarInformeEnPDF(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); end; TsrvReferencias_Invoker = class(TDataAbstractService_Invoker) @@ -1014,6 +1017,96 @@ begin end; end; +{ TsrvAlbaranesProveedor_Invoker } + +procedure TsrvAlbaranesProveedor_Invoker.Invoke_GenerarInforme(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); +{ function GenerarInforme(const ListaID: TIntegerArray): Binary; } +var + ListaID: FactuGES_Intf.TIntegerArray; + lResult: Binary; + __lObjectDisposer: TROObjectDisposer; +begin + ListaID := nil; + lResult := nil; + try + __Message.Read('ListaID', TypeInfo(FactuGES_Intf.TIntegerArray), ListaID, []); + + lResult := (__Instance as IsrvAlbaranesProveedor).GenerarInforme(ListaID); + + __Message.InitializeResponseMessage(__Transport, 'FactuGES', 'srvAlbaranesProveedor', 'GenerarInformeResponse'); + __Message.Write('Result', TypeInfo(Binary), lResult, []); + __Message.Finalize; + __Message.UnsetAttributes(__Transport); + + finally + __lObjectDisposer := TROObjectDisposer.Create(__Instance); + try + __lObjectDisposer.Add(ListaID); + __lObjectDisposer.Add(lResult); + finally + __lObjectDisposer.Free(); + end; + end; +end; + +procedure TsrvAlbaranesProveedor_Invoker.Invoke_GenerarInformeEnWord(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); +{ function GenerarInformeEnWord(const ID: Integer): Binary; } +var + ID: Integer; + lResult: Binary; + __lObjectDisposer: TROObjectDisposer; +begin + lResult := nil; + try + __Message.Read('ID', TypeInfo(Integer), ID, []); + + lResult := (__Instance as IsrvAlbaranesProveedor).GenerarInformeEnWord(ID); + + __Message.InitializeResponseMessage(__Transport, 'FactuGES', 'srvAlbaranesProveedor', 'GenerarInformeEnWordResponse'); + __Message.Write('Result', TypeInfo(Binary), lResult, []); + __Message.Finalize; + __Message.UnsetAttributes(__Transport); + + finally + __lObjectDisposer := TROObjectDisposer.Create(__Instance); + try + __lObjectDisposer.Add(lResult); + finally + __lObjectDisposer.Free(); + end; + end; +end; + +procedure TsrvAlbaranesProveedor_Invoker.Invoke_GenerarInformeEnPDF(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); +{ function GenerarInformeEnPDF(const ListaID: TIntegerArray): Binary; } +var + ListaID: FactuGES_Intf.TIntegerArray; + lResult: Binary; + __lObjectDisposer: TROObjectDisposer; +begin + ListaID := nil; + lResult := nil; + try + __Message.Read('ListaID', TypeInfo(FactuGES_Intf.TIntegerArray), ListaID, []); + + lResult := (__Instance as IsrvAlbaranesProveedor).GenerarInformeEnPDF(ListaID); + + __Message.InitializeResponseMessage(__Transport, 'FactuGES', 'srvAlbaranesProveedor', 'GenerarInformeEnPDFResponse'); + __Message.Write('Result', TypeInfo(Binary), lResult, []); + __Message.Finalize; + __Message.UnsetAttributes(__Transport); + + finally + __lObjectDisposer := TROObjectDisposer.Create(__Instance); + try + __lObjectDisposer.Add(ListaID); + __lObjectDisposer.Add(lResult); + finally + __lObjectDisposer.Free(); + end; + end; +end; + { TsrvReferencias_Invoker } procedure TsrvReferencias_Invoker.Invoke_DarNuevaReferencia(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); diff --git a/Source/Servicios/RODLFILE.res b/Source/Servicios/RODLFILE.res index ac6b4bf29fe8b13c9bc9d6e5eebce32bef1a7032..2388d1b3acae0da48e93865a035b8d3745a392bd 100644 GIT binary patch delta 170 zcmWN}Jqp4w6aZkTu1XaTP-;gXw0TKPunzfo0TCC)19$=H-b)A>ojiiLiine&$M6Ck zz^>o$J?_cxm7KDqxLot|Ha6olKI`Eu&-N?7%v(WPR)LjJk@vtAGB79*f<-AwAgRFO zVe^fjdNAe82I(XRG}ZwpQlLGvK&;YS850oWsDF%&ZwoC-Z^;GFP8;BsORze4kT|!U RYbLzt;&)6Z;nv$N)_+tbF7E&U delta 24 gcmexzh-u#*rU?p6@8)h)njJLRU(Iu~O_+r@0FLJhO8@`> diff --git a/Source/Servidor/FactuGES_Server.RES b/Source/Servidor/FactuGES_Server.RES index d2e61f935f5ec37b8b2c82d278159f30cfd5e1e0..790435b0e75d921a9db5d5762f5dd7045cea1ab3 100644 GIT binary patch delta 75 zcmZ3om2t^d#tlZ1oGc7%42%p63@nqaBO4h_Chv_j29h5m)kRYn@)>d&G8yt1(t#`; c1_cH~28+qMQL3Cq3I?59O*2NK= diff --git a/Source/Servidor/FactuGES_Server.dpr b/Source/Servidor/FactuGES_Server.dpr index 38026e01..894edd70 100644 --- a/Source/Servidor/FactuGES_Server.dpr +++ b/Source/Servidor/FactuGES_Server.dpr @@ -132,7 +132,9 @@ uses schPedidosProveedorClient_Intf in '..\Modulos\Pedidos a proveedor\Model\schPedidosProveedorClient_Intf.pas', schPedidosProveedorServer_Intf in '..\Modulos\Pedidos a proveedor\Model\schPedidosProveedorServer_Intf.pas', schFacturasClienteClient_Intf in '..\Modulos\Facturas de cliente\Model\schFacturasClienteClient_Intf.pas', - schFacturasClienteServer_Intf in '..\Modulos\Facturas de cliente\Model\schFacturasClienteServer_Intf.pas'; + schFacturasClienteServer_Intf in '..\Modulos\Facturas de cliente\Model\schFacturasClienteServer_Intf.pas', + uRptAlbaranesProveedor_Server in '..\Modulos\Albaranes de proveedor\Reports\uRptAlbaranesProveedor_Server.pas' {RptAlbaranesProveedor: TDataModule}, + uRptWordAlbaranProveedor in '..\Modulos\Albaranes de proveedor\Reports\uRptWordAlbaranProveedor.pas' {RptWordAlbaranProveedor: TDataModule}; {$R *.res} {$R ..\Servicios\RODLFile.res} diff --git a/Source/Servidor/FactuGES_Server.dproj b/Source/Servidor/FactuGES_Server.dproj index 49756c07..663af061 100644 --- a/Source/Servidor/FactuGES_Server.dproj +++ b/Source/Servidor/FactuGES_Server.dproj @@ -1,323 +1,331 @@ - + - - {ebdcd25d-40d7-4146-91ec-a0ea4aa1dcd1} - FactuGES_Server.dpr - Debug - AnyCPU - DCC32 - ..\..\Output\Debug\Servidor\FactuGES_Server.exe - vcl;rtl;vclx;vclactnband;dbrtl;vcldb;vcldbx;bdertl;dsnap;dsnapcon;teeUI;teedb;tee;adortl;vclib;ibxpress;dbxcds;dbexpress;DbxCommonDriver;IndyCore;IndySystem;IndyProtocols;VclSmp;vclie;webdsnap;xmlrtl;inet;inetdbbde;inetdbxpress;RemObjects_BPDX_D11;RemObjects_RODX_D11;RemObjects_Indy_D11;RemObjects_Synapse_D11;RemObjects_WebBroker_D11;DataAbstract_Core_D11;DataAbstract_DBXDriver_D11;DataAbstract_IDE_D11;DataAbstract_Scripting_D11;DataAbstract_SDACDriver_D11;sdac105;dac105;DataAbstract_SQLiteDriver_D11;cxEditorsD10;cxLibraryD10;dxThemeD10;cxDataD10;cxExtEditorsD10;cxGridD10;cxPageControlD10;cxSchedulerD10;cxTreeListD10;cxVerticalGridD10;dxBarD10;dxComnD10;dxBarDBNavD10;dxBarExtDBItemsD10;dxBarExtItemsD10;dxDockingD10;dxLayoutControlD10;dxNavBarD10;dxPSCoreD10;dxsbD10;dxPScxCommonD10;dxPSLnksD10;vclshlctrls;dxPScxExtCommonD10;dxPScxGridLnkD10;dxPScxPCProdD10;dxPScxScheduler2LnkD10;dxPScxTLLnkD10;dxPSdxLCLnkD10;dxPsPrVwAdvD10;pckMD5;pckUCDataConnector;pckUserControl_RT;PluginSDK_D10R;PNG_D10;PngComponentsD10;tb2k_d10;tbx_d10;JclVcl;Jcl;JvXPCtrlsD11R;JvCoreD11R;JvSystemD11R;JvStdCtrlsD11R;JvAppFrmD11R;JvBandsD11R;JvDBD11R;JvDlgsD11R;JvBDED11R;JvCmpD11R;JvCryptD11R;JvCtrlsD11R;JvCustomD11R;JvDockingD11R;JvDotNetCtrlsD11R;JvEDID11R;JvGlobusD11R;JvHMID11R;JvInterpreterD11R;JvJansD11R;JvManagedThreadsD11R;JvMMD11R;JvNetD11R;JvPageCompsD11R;JvPluginD11R;JvPrintPreviewD11R;JvRuntimeDesignD11R;JvTimeFrameworkD11R;JvUIBD11R;JvValidatorsD11R;JvWizardD11R;pckUCADOConn;pckUCBDEConn;pckUCIBXConn;pckUCMidasConn;cxIntlPrintSys3D10;cxExportD10;cxIntl5D10;GUISDK_D11;ccpackD11;JSDialog100;fsTee11;fs11;frx11;frxADO11;frxBDE11;frxDB11;frxDBX11;frxe11;frxIBX11;frxTee11;fsADO11;fsBDE11;fsDB11;fsIBX11;websnap;soaprtl;IntrawebDB_90_100;Intraweb_90_100 - - - 7.0 - False - False - 0 - 3 - ..\..\Output\Release\Servidor - RELEASE - - - 7.0 - 3 - ..\..\Output\Debug\Servidor - DEBUG; - True - True - True - $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10 - $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10 - $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10 - $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10 - - - Delphi.Personality - - -FalseTrueFalse/standaloneTrueFalse1630FalseFalseFalseFalseFalse308212521.6.3.01.6.3.0jueves, 15 de enero de 2009 14:12FactuGES_Server.dpr - - - - - MainSource - - - - - -
srvEmpresas
- TDARemoteService -
- -
srvProvinciasPoblaciones_Impl
- TDataModule -
- - - -
srvUsuarios
- TDataAbstractService -
- - - - - - - -
RptAlbaranesCliente
- TDataModule -
- -
RptWordAlbaranCliente
- TDataModule -
- -
srvAlbaranesCliente
- TDataAbstractService -
- - - - -
srvAlbaranesProveedor
- TDataAbstractService -
- - - -
srvAlmacenes
- TDARemoteService -
- - - - -
srvArticulos
- TDARemoteService -
- - - - - - - -
RptEtiquetasContacto
- TDataModule -
- -
RptFichasEmpleado
- TDataModule -
- -
srvContactos
- TDARemoteService -
- - - -
srvFabricantes
- TDataAbstractService -
- - - - -
RptFacturasCliente
- TDataModule -
- -
RptWordFacturaCliente
- TDataModule -
- -
srvFacturasCliente
- TDataAbstractService -
- - - - -
RptFacturasProveedor
- TDataModule -
- -
srvFacturasProveedor
- TDataAbstractService -
- - - -
srvFamilias
- TDataAbstractService -
- - - -
srvFormasPago
- TDataAbstractService -
- -
srvGestorDocumentos
- TDataAbstractService -
- -
srvGestorInformes
- TDataAbstractService -
- - - -
srvHistoricoMovimientos
- TDataAbstractService -
- - - -
srvInventario
- TDataAbstractService -
- - - - -
srvObras
- TDataAbstractService -
- - - - -
RptPedidosProveedor
- TDataModule -
- -
RptWordPedidoProveedor
- TDataModule -
- -
srvPedidosProveedor
- TDataAbstractService -
- - - - -
RptPresupuestosCliente
- TDataModule -
- -
RptWordCertificadoTrabajo
- TDataModule -
- -
RptWordPresupuestoCliente
- TDataModule -
- -
srvPresupuestosCliente
- TDataAbstractService -
- - - -
RptRecibosCliente
- TDataModule -
- -
srvRecibosCliente
- TDataAbstractService -
- - - -
RptRecibosProveedor
- TDataModule -
- -
srvRecibosProveedor
- TDataAbstractService -
- - - -
srvReferencias
- TDataAbstractService -
- - - - -
srvRemesasCliente
- TDataAbstractService -
- - - - -
srvRemesasProveedor
- TDataAbstractService -
- - - -
srvTiposIVA
- TDataAbstractService -
- - - -
srvUnidadesMedida
- TDataAbstractService -
- - - -
srvConfiguracion
- TDataAbstractService -
- -
frConexionBD
- TFrame -
- -
frConfGeneral
- TFrame -
- -
fConfiguracion
- TForm -
- -
FrameConfiguracion
- TFrame -
- -
srvLogin
- TDARemoteService -
- -
fAcercaDe
-
- -
dmServer
- TDataModule -
- -
fServerForm
-
- - - - - - - - - -
+ + {ebdcd25d-40d7-4146-91ec-a0ea4aa1dcd1} + FactuGES_Server.dpr + Debug + AnyCPU + DCC32 + ..\..\Output\Debug\Servidor\FactuGES_Server.exe + vcl;rtl;vclx;vclactnband;dbrtl;vcldb;vcldbx;bdertl;dsnap;dsnapcon;teeUI;teedb;tee;adortl;vclib;ibxpress;dbxcds;dbexpress;DbxCommonDriver;IndyCore;IndySystem;IndyProtocols;VclSmp;vclie;webdsnap;xmlrtl;inet;inetdbbde;inetdbxpress;RemObjects_BPDX_D11;RemObjects_RODX_D11;RemObjects_Indy_D11;RemObjects_Synapse_D11;RemObjects_WebBroker_D11;DataAbstract_Core_D11;DataAbstract_DBXDriver_D11;DataAbstract_IDE_D11;DataAbstract_Scripting_D11;DataAbstract_SDACDriver_D11;sdac105;dac105;DataAbstract_SQLiteDriver_D11;cxEditorsD10;cxLibraryD10;dxThemeD10;cxDataD10;cxExtEditorsD10;cxGridD10;cxPageControlD10;cxSchedulerD10;cxTreeListD10;cxVerticalGridD10;dxBarD10;dxComnD10;dxBarDBNavD10;dxBarExtDBItemsD10;dxBarExtItemsD10;dxDockingD10;dxLayoutControlD10;dxNavBarD10;dxPSCoreD10;dxsbD10;dxPScxCommonD10;dxPSLnksD10;vclshlctrls;dxPScxExtCommonD10;dxPScxGridLnkD10;dxPScxPCProdD10;dxPScxScheduler2LnkD10;dxPScxTLLnkD10;dxPSdxLCLnkD10;dxPsPrVwAdvD10;pckMD5;pckUCDataConnector;pckUserControl_RT;PluginSDK_D10R;PNG_D10;PngComponentsD10;tb2k_d10;tbx_d10;JclVcl;Jcl;JvXPCtrlsD11R;JvCoreD11R;JvSystemD11R;JvStdCtrlsD11R;JvAppFrmD11R;JvBandsD11R;JvDBD11R;JvDlgsD11R;JvBDED11R;JvCmpD11R;JvCryptD11R;JvCtrlsD11R;JvCustomD11R;JvDockingD11R;JvDotNetCtrlsD11R;JvEDID11R;JvGlobusD11R;JvHMID11R;JvInterpreterD11R;JvJansD11R;JvManagedThreadsD11R;JvMMD11R;JvNetD11R;JvPageCompsD11R;JvPluginD11R;JvPrintPreviewD11R;JvRuntimeDesignD11R;JvTimeFrameworkD11R;JvUIBD11R;JvValidatorsD11R;JvWizardD11R;pckUCADOConn;pckUCBDEConn;pckUCIBXConn;pckUCMidasConn;cxIntlPrintSys3D10;cxExportD10;cxIntl5D10;GUISDK_D11;ccpackD11;JSDialog100;fsTee11;fs11;frx11;frxADO11;frxBDE11;frxDB11;frxDBX11;frxe11;frxIBX11;frxTee11;fsADO11;fsBDE11;fsDB11;fsIBX11;websnap;soaprtl;IntrawebDB_90_100;Intraweb_90_100 + + + 7.0 + False + False + 0 + 3 + ..\..\Output\Release\Servidor + RELEASE + + + 7.0 + 3 + ..\..\Output\Debug\Servidor + DEBUG; + True + True + True + $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10 + $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10 + $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10 + $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10 + + + Delphi.Personality + + + FalseTrueFalse/standaloneTrueFalse1640FalseFalseFalseFalseFalse308212521.6.4.01.6.4.0viernes, 16 de enero de 2009 21:22FactuGES_Server.dpr + + + + + MainSource + + + + + +
srvEmpresas
+ TDARemoteService +
+ +
srvProvinciasPoblaciones_Impl
+ TDataModule +
+ + + +
srvUsuarios
+ TDataAbstractService +
+ + + + + + + +
RptAlbaranesCliente
+ TDataModule +
+ +
RptWordAlbaranCliente
+ TDataModule +
+ +
srvAlbaranesCliente
+ TDataAbstractService +
+ + + + +
RptAlbaranesProveedor
+ TDataModule +
+ +
RptWordAlbaranProveedor
+ TDataModule +
+ +
srvAlbaranesProveedor
+ TDataAbstractService +
+ + + +
srvAlmacenes
+ TDARemoteService +
+ + + + +
srvArticulos
+ TDARemoteService +
+ + + + + + + +
RptEtiquetasContacto
+ TDataModule +
+ +
RptFichasEmpleado
+ TDataModule +
+ +
srvContactos
+ TDARemoteService +
+ + + +
srvFabricantes
+ TDataAbstractService +
+ + + + +
RptFacturasCliente
+ TDataModule +
+ +
RptWordFacturaCliente
+ TDataModule +
+ +
srvFacturasCliente
+ TDataAbstractService +
+ + + + +
RptFacturasProveedor
+ TDataModule +
+ +
srvFacturasProveedor
+ TDataAbstractService +
+ + + +
srvFamilias
+ TDataAbstractService +
+ + + +
srvFormasPago
+ TDataAbstractService +
+ +
srvGestorDocumentos
+ TDataAbstractService +
+ +
srvGestorInformes
+ TDataAbstractService +
+ + + +
srvHistoricoMovimientos
+ TDataAbstractService +
+ + + +
srvInventario
+ TDataAbstractService +
+ + + + +
srvObras
+ TDataAbstractService +
+ + + + +
RptPedidosProveedor
+ TDataModule +
+ +
RptWordPedidoProveedor
+ TDataModule +
+ +
srvPedidosProveedor
+ TDataAbstractService +
+ + + + +
RptPresupuestosCliente
+ TDataModule +
+ +
RptWordCertificadoTrabajo
+ TDataModule +
+ +
RptWordPresupuestoCliente
+ TDataModule +
+ +
srvPresupuestosCliente
+ TDataAbstractService +
+ + + +
RptRecibosCliente
+ TDataModule +
+ +
srvRecibosCliente
+ TDataAbstractService +
+ + + +
RptRecibosProveedor
+ TDataModule +
+ +
srvRecibosProveedor
+ TDataAbstractService +
+ + + +
srvReferencias
+ TDataAbstractService +
+ + + + +
srvRemesasCliente
+ TDataAbstractService +
+ + + + +
srvRemesasProveedor
+ TDataAbstractService +
+ + + +
srvTiposIVA
+ TDataAbstractService +
+ + + +
srvUnidadesMedida
+ TDataAbstractService +
+ + + +
srvConfiguracion
+ TDataAbstractService +
+ +
frConexionBD
+ TFrame +
+ +
frConfGeneral
+ TFrame +
+ +
fConfiguracion
+ TForm +
+ +
FrameConfiguracion
+ TFrame +
+ +
srvLogin
+ TDARemoteService +
+ +
fAcercaDe
+
+ +
dmServer
+ TDataModule +
+ +
fServerForm
+
+ + + + + + + + + +