- Tarea #1204 -> Poder generar un albarán a partir de un contrato

- Cambiar Aspack por UX



git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES2/trunk@576 f4e31baf-9722-1c47-927c-6f952f962d4b
This commit is contained in:
David Arranz 2013-05-17 14:40:44 +00:00
parent e901eb7dd6
commit 306115550b
65 changed files with 6329 additions and 747 deletions

View File

@ -14,8 +14,8 @@
<Notes>
<![CDATA[]]>
</Notes>
<LastBuildRun>00:03:10</LastBuildRun>
<LastBuildStart>11/04/2012 12:05:34</LastBuildStart>
<LastBuildRun>00:03:53</LastBuildRun>
<LastBuildStart>16/05/2013 15:44:27</LastBuildStart>
<LastBuildState>True</LastBuildState>
</properties>
</project>

Binary file not shown.

View File

@ -14,8 +14,8 @@
<Notes>
<![CDATA[]]>
</Notes>
<LastBuildRun>00:00:00</LastBuildRun>
<LastBuildStart>30/12/1899</LastBuildStart>
<LastBuildState>True</LastBuildState>
<LastBuildRun>00:00:15</LastBuildRun>
<LastBuildStart>17/05/2013 15:04:17</LastBuildStart>
<LastBuildState>False</LastBuildState>
</properties>
</project>

Binary file not shown.

View File

@ -433,44 +433,45 @@ CREATE TABLE COMISIONES_LIQ_VENDEDORES(
IMPORTE_TOTAL TIPO_IMPORTE);
CREATE TABLE ALBARANES_CLIENTE (
ID TIPO_ID NOT NULL,
ID_EMPRESA TIPO_ID,
ID_CLIENTE TIPO_ID,
ID TIPO_ID NOT NULL /* TIPO_ID = INTEGER */,
ID_EMPRESA TIPO_ID /* TIPO_ID = INTEGER */,
ID_CLIENTE TIPO_ID /* TIPO_ID = INTEGER */,
FECHA_ALBARAN DATE,
ID_ALMACEN TIPO_ID,
ID_PEDIDO TIPO_ID,
ID_FACTURA TIPO_ID,
ID_ALMACEN TIPO_ID /* TIPO_ID = INTEGER */,
ID_PEDIDO TIPO_ID /* TIPO_ID = INTEGER */,
ID_FACTURA TIPO_ID /* TIPO_ID = INTEGER */,
TIPO VARCHAR(1),
REFERENCIA VARCHAR(255),
ID_DIRECCION TIPO_ID,
CALLE VARCHAR(255),
CODIGO_POSTAL VARCHAR(10),
POBLACION VARCHAR(255),
PROVINCIA VARCHAR(255),
PERSONA_CONTACTO VARCHAR(255),
TELEFONO VARCHAR(25),
MOVIL VARCHAR(25),
IMPORTE_NETO TIPO_IMPORTE,
IMPORTE_PORTE TIPO_IMPORTE,
DESCUENTO TIPO_PORCENTAJE,
IMPORTE_DESCUENTO TIPO_IMPORTE,
BASE_IMPONIBLE TIPO_IMPORTE,
ID_TIPO_IVA TIPO_ID,
IVA TIPO_PORCENTAJE,
IMPORTE_IVA TIPO_IMPORTE,
IMPORTE_TOTAL TIPO_IMPORTE,
OBSERVACIONES TIPO_NOTAS,
INCIDENCIAS TIPO_NOTAS,
IMPORTE_NETO TIPO_IMPORTE /* TIPO_IMPORTE = NUMERIC(11,2) */,
IMPORTE_PORTE TIPO_IMPORTE /* TIPO_IMPORTE = NUMERIC(11,2) */,
DESCUENTO TIPO_PORCENTAJE /* TIPO_PORCENTAJE = FLOAT */,
IMPORTE_DESCUENTO TIPO_IMPORTE /* TIPO_IMPORTE = NUMERIC(11,2) */,
BASE_IMPONIBLE TIPO_IMPORTE /* TIPO_IMPORTE = NUMERIC(11,2) */,
IVA TIPO_PORCENTAJE /* TIPO_PORCENTAJE = FLOAT */,
IMPORTE_IVA TIPO_IMPORTE /* TIPO_IMPORTE = NUMERIC(11,2) */,
IMPORTE_TOTAL TIPO_IMPORTE /* TIPO_IMPORTE = NUMERIC(11,2) */,
OBSERVACIONES TIPO_NOTAS /* TIPO_NOTAS = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */,
INCIDENCIAS TIPO_NOTAS /* TIPO_NOTAS = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */,
INCIDENCIAS_ACTIVAS SMALLINT DEFAULT 0 NOT NULL,
FECHA_ALTA TIMESTAMP,
FECHA_MODIFICACION TIMESTAMP,
USUARIO TIPO_USUARIO,
ID_FORMA_PAGO TIPO_ID,
USUARIO TIPO_USUARIO /* TIPO_USUARIO = VARCHAR(30) */,
ID_FORMA_PAGO TIPO_ID /* TIPO_ID = INTEGER */,
FECHA_ENVIO DATE,
FECHA_RECEPCION DATE,
FECHA_PREVISTA_ENVIO DATE,
REFERENCIA_CLIENTE VARCHAR(255),
ID_TIENDA TIPO_ID
REFERENCIA_CLIENTE VARCHAR(255) COLLATE ES_ES,
ID_TIENDA TIPO_ID /* TIPO_ID = INTEGER */,
ID_DIRECCION TIPO_ID /* TIPO_ID = INTEGER */,
ID_TIPO_IVA TIPO_ID /* TIPO_ID = INTEGER */,
MOVIL VARCHAR(25),
ID_CONTRATO TIPO_ID /* TIPO_ID = INTEGER */
);
CREATE TABLE ALBARANES_CLIENTE_DETALLES (
@ -1632,7 +1633,7 @@ CREATE VIEW V_ALBARANES_CLIENTE(
PROVINCIA,
PERSONA_CONTACTO,
TELEFONO,
MOVIL,
MOVIL,
IMPORTE_NETO,
IMPORTE_PORTE,
DESCUENTO,
@ -4261,6 +4262,7 @@ ALTER TABLE REFERENCIAS ADD CONSTRAINT PK_REFERENCIAS PRIMARY KEY (ID);
/******************************************************************************/
ALTER TABLE ALBARANES_CLIENTE ADD CONSTRAINT FK_ALBARANES_CLIENTE_1 FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_CLIENTE (ID) ON DELETE SET NULL ON UPDATE SET NULL;
ALTER TABLE ALBARANES_CLIENTE ADD CONSTRAINT FK_ALBARANES_CLIENTE_2 FOREIGN KEY (ID_CONTRATO) REFERENCES CONTRATOS_CLIENTE(ID) ON DELETE SET NULL ON UPDATE SET NULL;
ALTER TABLE ALBARANES_CLIENTE ADD CONSTRAINT FK_ALBARAN_CLIENTE_2 FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ALBARANES_PROVEEDOR ADD CONSTRAINT FK_ALBARAN_PROVEEDOR_2 FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ALMACENES ADD CONSTRAINT FK_ALMACENES_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;

View File

@ -56,50 +56,53 @@
<DelphiCompile Include="ApplicationBase.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="C:\Documents and Settings\Usuario\adortl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Base.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ccpackD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cfpack_d11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxDataD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxEditorsD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxExtEditorsD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxLibraryD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\DataAbstract_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dbrtl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\designide.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dsnap.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxCoreD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxGDIPlusD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxNavBarD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxThemeD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\GUIBase.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\GUISDK_D11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Jcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JclVcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvCoreD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvCtrlsD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvJansD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvMMD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvStdCtrlsD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvSystemD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\RemObjects_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\rtl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vclactnband.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcldb.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcljpg.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vclx.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\xmlrtl.dcp" />
<DCCReference Include="Configuracion\Controller\uConfiguracionController.pas" />
<DCCReference Include="Configuracion\Controller\Views\uIViewConfiguracionBase.pas" />
<DCCReference Include="Configuracion\Views\adortl.dcp" />
<DCCReference Include="Configuracion\Views\Base.dcp" />
<DCCReference Include="Configuracion\Views\ccpackD11.dcp" />
<DCCReference Include="Configuracion\Views\cfpack_d11.dcp" />
<DCCReference Include="Configuracion\Views\cxDataD11.dcp" />
<DCCReference Include="Configuracion\Views\cxEditorsD11.dcp" />
<DCCReference Include="Configuracion\Views\cxExtEditorsD11.dcp" />
<DCCReference Include="Configuracion\Views\cxLibraryD11.dcp" />
<DCCReference Include="Configuracion\Views\DataAbstract_Core_D11.dcp" />
<DCCReference Include="Configuracion\Views\dbrtl.dcp" />
<DCCReference Include="Configuracion\Views\designide.dcp" />
<DCCReference Include="Configuracion\Views\dsnap.dcp" />
<DCCReference Include="Configuracion\Views\dxCoreD11.dcp" />
<DCCReference Include="Configuracion\Views\dxGDIPlusD11.dcp" />
<DCCReference Include="Configuracion\Views\dxNavBarD11.dcp" />
<DCCReference Include="Configuracion\Views\dxThemeD11.dcp" />
<DCCReference Include="Configuracion\Views\GUIBase.dcp" />
<DCCReference Include="Configuracion\Views\GUISDK_D11R.dcp" />
<DCCReference Include="Configuracion\Views\Jcl.dcp" />
<DCCReference Include="Configuracion\Views\JclVcl.dcp" />
<DCCReference Include="Configuracion\Views\JvCoreD11R.dcp" />
<DCCReference Include="Configuracion\Views\JvCtrlsD11R.dcp" />
<DCCReference Include="Configuracion\Views\JvJansD11R.dcp" />
<DCCReference Include="Configuracion\Views\JvMMD11R.dcp" />
<DCCReference Include="Configuracion\Views\JvStdCtrlsD11R.dcp" />
<DCCReference Include="Configuracion\Views\JvSystemD11R.dcp" />
<DCCReference Include="Configuracion\Views\RemObjects_Core_D11.dcp" />
<DCCReference Include="Configuracion\Views\rtl.dcp" />
<DCCReference Include="Configuracion\Views\uEditorConfiguracion.pas">
<Form>fConfiguracionEditor</Form>
</DCCReference>
<DCCReference Include="Configuracion\Views\uViewConfiguracionBase.pas" />
<DCCReference Include="Configuracion\Views\uViewConfiguracionBase.pas">
<Form>frViewConfiguracionBase</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\Views\uViewConfiguracionGeneral.pas">
<Form>frViewConfiguracionGeneral</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\Views\vcl.dcp" />
<DCCReference Include="Configuracion\Views\vclactnband.dcp" />
<DCCReference Include="Configuracion\Views\vcldb.dcp" />
<DCCReference Include="Configuracion\Views\vcljpg.dcp" />
<DCCReference Include="Configuracion\Views\vclx.dcp" />
<DCCReference Include="Configuracion\Views\xmlrtl.dcp" />
<DCCReference Include="Ejercicios\Controller\uEjerciciosController.pas" />
<DCCReference Include="Ejercicios\Controller\View\uIEditorEjercicio.pas" />
<DCCReference Include="Ejercicios\Controller\View\uIEditorEjercicios.pas" />

View File

@ -58,55 +58,55 @@
<DelphiCompile Include="Base.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\Modulos\Contratos de cliente\adortl.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\cxDataD11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\cxEditorsD11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\cxExtEditorsD11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\cxGridD11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\cxLibraryD11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\cxPageControlD11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\DataAbstract_Core_D11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\dbrtl.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\dclIndyCore.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\designide.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\dsnap.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\dxGDIPlusD11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\dxPSCoreD11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\dxThemeD11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\GUISDK_D11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\IndyCore.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\IndyProtocols.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\IndySystem.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\Jcl.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JclVcl.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JSDialog100.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JvCmpD11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JvCoreD11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JvCtrlsD11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JvDlgsD11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JvMMD11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JvNetD11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JvPageCompsD11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JvStdCtrlsD11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\JvSystemD11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\pckMD5.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\pckUCDataConnector.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\pckUserControl_RT.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\PluginSDK_D11R.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\PngComponentsD10.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\PNG_D10.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\RemObjects_Core_D11.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\rtl.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\TB2k_D10.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\tbx_d10.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\vcl.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\vclactnband.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\vcldb.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\vcljpg.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\VclSmp.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\vclx.dcp" />
<DCCReference Include="..\Modulos\Contratos de cliente\xmlrtl.dcp" />
<DCCReference Include="..\Servicios\FactuGES_Intf.pas" />
<DCCReference Include="C:\Documents and Settings\Usuario\adortl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxDataD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxEditorsD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxExtEditorsD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxGridD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxLibraryD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxPageControlD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\DataAbstract_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dbrtl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dclIndyCore.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\designide.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dsnap.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxGDIPlusD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxPSCoreD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxThemeD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\GUISDK_D11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\IndyCore.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\IndyProtocols.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\IndySystem.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Jcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JclVcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JSDialog100.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvCmpD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvCoreD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvCtrlsD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvDlgsD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvMMD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvNetD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvPageCompsD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvStdCtrlsD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvSystemD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\pckMD5.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\pckUCDataConnector.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\pckUserControl_RT.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\PluginSDK_D11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\PngComponentsD10.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\PNG_D10.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\RemObjects_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\rtl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\TB2k_D10.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\tbx_d10.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vclactnband.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcldb.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcljpg.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\VclSmp.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vclx.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\xmlrtl.dcp" />
<DCCReference Include="Conexion\uConfigurarConexion.pas">
<Form>fConfigurarConexion</Form>
<DesignClass>TForm</DesignClass>

View File

@ -52,7 +52,8 @@
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType>VCLApplication</Borland.ProjectType>
<BorlandProject>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Language><Language Name="RootDir">C:\Archivos de programa\Borland\Delphi7\Bin\</Language></Language><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">2</VersionInfo><VersionInfo Name="MinorVer">5</VersionInfo><VersionInfo Name="Release">2</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">3082</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName">Rodax Software S.L.</VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">2.5.2.0</VersionInfoKeys><VersionInfoKeys Name="InternalName">FactuGES</VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName">FactuGES</VersionInfoKeys><VersionInfoKeys Name="ProductVersion">2.5.2.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Language><Language Name="RootDir">C:\Archivos de programa\Borland\Delphi7\Bin\</Language></Language><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">2</VersionInfo><VersionInfo Name="MinorVer">5</VersionInfo><VersionInfo Name="Release">3</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">3082</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName">Rodax Software S.L.</VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">2.5.3.0</VersionInfoKeys><VersionInfoKeys Name="InternalName">FactuGES</VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName">FactuGES</VersionInfoKeys><VersionInfoKeys Name="ProductVersion">2.5.3.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<Excluded_Packages Name="C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\dxPScxScheduler2LnkD11.bpl">File C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\dxPScxScheduler2LnkD11.bpl not found</Excluded_Packages>
</Excluded_Packages><Source><Source Name="MainSource">FactuGES.dpr</Source></Source></Delphi.Personality><ModelSupport>False</ModelSupport></BorlandProject></BorlandProject>

View File

@ -1,7 +1,7 @@
MAINICON ICON "C:\Codigo Acana\Resources\Iconos\Factuges.ico"
1 VERSIONINFO
FILEVERSION 2,5,2,0
PRODUCTVERSION 2,5,2,0
FILEVERSION 2,5,3,0
PRODUCTVERSION 2,5,3,0
FILEFLAGSMASK 0x3FL
FILEFLAGS 0x00L
FILEOS 0x40004L
@ -13,10 +13,10 @@ BEGIN
BLOCK "0C0A04E4"
BEGIN
VALUE "CompanyName", "Rodax Software S.L.\0"
VALUE "FileVersion", "2.5.2.0\0"
VALUE "FileVersion", "2.5.3.0\0"
VALUE "InternalName", "FactuGES\0"
VALUE "ProductName", "FactuGES\0"
VALUE "ProductVersion", "2.5.2.0\0"
VALUE "ProductVersion", "2.5.3.0\0"
END
END
BLOCK "VarFileInfo"

Binary file not shown.

View File

@ -1,4 +1,4 @@
{$DEFINE MULTIEMPRESA}
{$DEFINE ALMACEN}
{DEFINE ALMACEN}
{DEFINE PEDIDOSPROVEEDOR}
{$DEFINE CONTABILIDAD}

Binary file not shown.

View File

@ -13,6 +13,8 @@
<Projects Include="..\Contactos\Views\Contactos_view.dproj" />
<Projects Include="..\Facturas de cliente\Views\FacturasCliente_view.dproj" />
<Projects Include="..\Presupuestos de cliente\Views\PresupuestosCliente_view.dproj" />
<Projects Include="..\Relaciones\Contratos de cliente - Albaranes de cliente\ConCli_AlbCli_relation.dproj" />
<Projects Include="..\Relaciones\Contratos de cliente - Facturas de cliente\ConCli_FacCli_relation.dproj" />
<Projects Include="Controller\AlbaranesCliente_controller.dproj" />
<Projects Include="Data\AlbaranesCliente_data.dproj" />
<Projects Include="Model\AlbaranesCliente_model.dproj" />
@ -97,6 +99,24 @@
<Target Name="AlbaranesCliente_controller:Make">
<MSBuild Projects="Controller\AlbaranesCliente_controller.dproj" Targets="Make" />
</Target>
<Target Name="ConCli_AlbCli_relation">
<MSBuild Projects="..\Relaciones\Contratos de cliente - Albaranes de cliente\ConCli_AlbCli_relation.dproj" Targets="" />
</Target>
<Target Name="ConCli_AlbCli_relation:Clean">
<MSBuild Projects="..\Relaciones\Contratos de cliente - Albaranes de cliente\ConCli_AlbCli_relation.dproj" Targets="Clean" />
</Target>
<Target Name="ConCli_AlbCli_relation:Make">
<MSBuild Projects="..\Relaciones\Contratos de cliente - Albaranes de cliente\ConCli_AlbCli_relation.dproj" Targets="Make" />
</Target>
<Target Name="ConCli_FacCli_relation">
<MSBuild Projects="..\Relaciones\Contratos de cliente - Facturas de cliente\ConCli_FacCli_relation.dproj" Targets="" />
</Target>
<Target Name="ConCli_FacCli_relation:Clean">
<MSBuild Projects="..\Relaciones\Contratos de cliente - Facturas de cliente\ConCli_FacCli_relation.dproj" Targets="Clean" />
</Target>
<Target Name="ConCli_FacCli_relation:Make">
<MSBuild Projects="..\Relaciones\Contratos de cliente - Facturas de cliente\ConCli_FacCli_relation.dproj" Targets="Make" />
</Target>
<Target Name="AlbaranesCliente_view">
<MSBuild Projects="Views\AlbaranesCliente_view.dproj" Targets="" />
</Target>
@ -152,13 +172,13 @@
<MSBuild Projects="..\Presupuestos de cliente\Views\PresupuestosCliente_view.dproj" Targets="Make" />
</Target>
<Target Name="Build">
<CallTarget Targets="Base;GUIBase;ApplicationBase;Contactos_view;Articulos_view;AlbaranesCliente_model;AlbaranesCliente_data;AlbaranesCliente_controller;AlbaranesCliente_view;AlbaranesCliente_plugin;FactuGES;FactuGES_Server;FacturasCliente_view;PresupuestosCliente_view" />
<CallTarget Targets="Base;GUIBase;ApplicationBase;Contactos_view;Articulos_view;AlbaranesCliente_model;AlbaranesCliente_data;AlbaranesCliente_controller;ConCli_AlbCli_relation;ConCli_FacCli_relation;AlbaranesCliente_view;AlbaranesCliente_plugin;FactuGES;FactuGES_Server;FacturasCliente_view;PresupuestosCliente_view" />
</Target>
<Target Name="Clean">
<CallTarget Targets="Base:Clean;GUIBase:Clean;ApplicationBase:Clean;Contactos_view:Clean;Articulos_view:Clean;AlbaranesCliente_model:Clean;AlbaranesCliente_data:Clean;AlbaranesCliente_controller:Clean;AlbaranesCliente_view:Clean;AlbaranesCliente_plugin:Clean;FactuGES:Clean;FactuGES_Server:Clean;FacturasCliente_view:Clean;PresupuestosCliente_view:Clean" />
<CallTarget Targets="Base:Clean;GUIBase:Clean;ApplicationBase:Clean;Contactos_view:Clean;Articulos_view:Clean;AlbaranesCliente_model:Clean;AlbaranesCliente_data:Clean;AlbaranesCliente_controller:Clean;ConCli_AlbCli_relation:Clean;ConCli_FacCli_relation:Clean;AlbaranesCliente_view:Clean;AlbaranesCliente_plugin:Clean;FactuGES:Clean;FactuGES_Server:Clean;FacturasCliente_view:Clean;PresupuestosCliente_view:Clean" />
</Target>
<Target Name="Make">
<CallTarget Targets="Base:Make;GUIBase:Make;ApplicationBase:Make;Contactos_view:Make;Articulos_view:Make;AlbaranesCliente_model:Make;AlbaranesCliente_data:Make;AlbaranesCliente_controller:Make;AlbaranesCliente_view:Make;AlbaranesCliente_plugin:Make;FactuGES:Make;FactuGES_Server:Make;FacturasCliente_view:Make;PresupuestosCliente_view:Make" />
<CallTarget Targets="Base:Make;GUIBase:Make;ApplicationBase:Make;Contactos_view:Make;Articulos_view:Make;AlbaranesCliente_model:Make;AlbaranesCliente_data:Make;AlbaranesCliente_controller:Make;ConCli_AlbCli_relation:Make;ConCli_FacCli_relation:Make;AlbaranesCliente_view:Make;AlbaranesCliente_plugin:Make;FactuGES:Make;FactuGES_Server:Make;FacturasCliente_view:Make;PresupuestosCliente_view:Make" />
</Target>
<Import Condition="Exists('$(MSBuildBinPath)\Borland.Group.Targets')" Project="$(MSBuildBinPath)\Borland.Group.Targets" />
</Project>

View File

@ -26,6 +26,11 @@ inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente
object tbl_AlbaranesCliente: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ID_CONTRATO'
DataType = datInteger
DictionaryEntry = 'AlbaranesCliente_ID_CONTRATO'
end
item
Name = 'ID'
DataType = datAutoInc
@ -112,6 +117,13 @@ inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente
DisplayLabel = 'Ref. pedido cliente'
DictionaryEntry = 'AlbaranesCliente_REF_PEDIDO'
end
item
Name = 'REF_CONTRATO'
DataType = datString
Size = 255
DisplayLabel = 'Ref. contrato cliente'
DictionaryEntry = 'AlbaranesCliente_REF_CONTRATO'
end
item
Name = 'ID_FACTURA'
DataType = datInteger
@ -182,6 +194,8 @@ inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente
Name = 'MOVIL'
DataType = datString
Size = 25
DisplayLabel = 'AlbaranesCliente_MOVIL'
DictionaryEntry = 'AlbaranesCliente_MOVIL'
end
item
Name = 'IMPORTE_NETO'
@ -222,6 +236,8 @@ inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente
item
Name = 'ID_TIPO_IVA'
DataType = datInteger
DisplayLabel = 'AlbaranesCliente_ID_TIPO_IVA'
DictionaryEntry = 'AlbaranesCliente_ID_TIPO_IVA'
end
item
Name = 'IVA'

View File

@ -9,9 +9,9 @@ const
{ Data table rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
RID_ListaAnosAlbaranes = '{B52C00C6-FE82-4F51-81FA-B4FF1B82A203}';
RID_AlbaranesCliente = '{34BC09FF-5B71-4550-8CB0-1DA569B133D7}';
RID_AlbaranesCliente_Detalles = '{86D6C469-278B-4655-A28C-3359D8812BB1}';
RID_ListaAnosAlbaranes = '{7EB3AC27-59E8-42B4-ADA3-CE4D9CAEB13C}';
RID_AlbaranesCliente = '{D2DA1D56-1646-4F90-8DE9-D4B5FFE8B553}';
RID_AlbaranesCliente_Detalles = '{BBD1F7AA-F56C-43AE-A7C7-0F58965BDF4A}';
{ Data table names }
nme_ListaAnosAlbaranes = 'ListaAnosAlbaranes';
@ -25,6 +25,7 @@ const
idx_ListaAnosAlbaranesANO = 0;
{ AlbaranesCliente fields }
fld_AlbaranesClienteID_CONTRATO = 'ID_CONTRATO';
fld_AlbaranesClienteID = 'ID';
fld_AlbaranesClienteID_EMPRESA = 'ID_EMPRESA';
fld_AlbaranesClienteID_CLIENTE = 'ID_CLIENTE';
@ -38,6 +39,7 @@ const
fld_AlbaranesClienteNOMBRE_ALMACEN = 'NOMBRE_ALMACEN';
fld_AlbaranesClienteID_PEDIDO = 'ID_PEDIDO';
fld_AlbaranesClienteREF_PEDIDO = 'REF_PEDIDO';
fld_AlbaranesClienteREF_CONTRATO = 'REF_CONTRATO';
fld_AlbaranesClienteID_FACTURA = 'ID_FACTURA';
fld_AlbaranesClienteREF_FACTURA = 'REF_FACTURA';
fld_AlbaranesClienteID_DIRECCION = 'ID_DIRECCION';
@ -71,50 +73,52 @@ const
fld_AlbaranesClienteTIENDA = 'TIENDA';
{ AlbaranesCliente field indexes }
idx_AlbaranesClienteID = 0;
idx_AlbaranesClienteID_EMPRESA = 1;
idx_AlbaranesClienteID_CLIENTE = 2;
idx_AlbaranesClienteNOMBRE = 3;
idx_AlbaranesClienteFECHA_ALBARAN = 4;
idx_AlbaranesClienteREFERENCIA = 5;
idx_AlbaranesClienteREFERENCIA_CLIENTE = 6;
idx_AlbaranesClienteTIPO = 7;
idx_AlbaranesClienteSITUACION = 8;
idx_AlbaranesClienteID_ALMACEN = 9;
idx_AlbaranesClienteNOMBRE_ALMACEN = 10;
idx_AlbaranesClienteID_PEDIDO = 11;
idx_AlbaranesClienteREF_PEDIDO = 12;
idx_AlbaranesClienteID_FACTURA = 13;
idx_AlbaranesClienteREF_FACTURA = 14;
idx_AlbaranesClienteID_DIRECCION = 15;
idx_AlbaranesClienteCALLE = 16;
idx_AlbaranesClienteCODIGO_POSTAL = 17;
idx_AlbaranesClientePOBLACION = 18;
idx_AlbaranesClientePROVINCIA = 19;
idx_AlbaranesClientePERSONA_CONTACTO = 20;
idx_AlbaranesClienteTELEFONO = 21;
idx_AlbaranesClienteMOVIL = 22;
idx_AlbaranesClienteIMPORTE_NETO = 23;
idx_AlbaranesClienteIMPORTE_PORTE = 24;
idx_AlbaranesClienteDESCUENTO = 25;
idx_AlbaranesClienteIMPORTE_DESCUENTO = 26;
idx_AlbaranesClienteBASE_IMPONIBLE = 27;
idx_AlbaranesClienteID_TIPO_IVA = 28;
idx_AlbaranesClienteIVA = 29;
idx_AlbaranesClienteIMPORTE_IVA = 30;
idx_AlbaranesClienteIMPORTE_TOTAL = 31;
idx_AlbaranesClienteOBSERVACIONES = 32;
idx_AlbaranesClienteINCIDENCIAS = 33;
idx_AlbaranesClienteINCIDENCIAS_ACTIVAS = 34;
idx_AlbaranesClienteFECHA_ALTA = 35;
idx_AlbaranesClienteFECHA_MODIFICACION = 36;
idx_AlbaranesClienteUSUARIO = 37;
idx_AlbaranesClienteID_FORMA_PAGO = 38;
idx_AlbaranesClienteFECHA_PREVISTA_ENVIO = 39;
idx_AlbaranesClienteFECHA_ENVIO = 40;
idx_AlbaranesClienteFECHA_RECEPCION = 41;
idx_AlbaranesClienteID_TIENDA = 42;
idx_AlbaranesClienteTIENDA = 43;
idx_AlbaranesClienteID_CONTRATO = 0;
idx_AlbaranesClienteID = 1;
idx_AlbaranesClienteID_EMPRESA = 2;
idx_AlbaranesClienteID_CLIENTE = 3;
idx_AlbaranesClienteNOMBRE = 4;
idx_AlbaranesClienteFECHA_ALBARAN = 5;
idx_AlbaranesClienteREFERENCIA = 6;
idx_AlbaranesClienteREFERENCIA_CLIENTE = 7;
idx_AlbaranesClienteTIPO = 8;
idx_AlbaranesClienteSITUACION = 9;
idx_AlbaranesClienteID_ALMACEN = 10;
idx_AlbaranesClienteNOMBRE_ALMACEN = 11;
idx_AlbaranesClienteID_PEDIDO = 12;
idx_AlbaranesClienteREF_PEDIDO = 13;
idx_AlbaranesClienteREF_CONTRATO = 14;
idx_AlbaranesClienteID_FACTURA = 15;
idx_AlbaranesClienteREF_FACTURA = 16;
idx_AlbaranesClienteID_DIRECCION = 17;
idx_AlbaranesClienteCALLE = 18;
idx_AlbaranesClienteCODIGO_POSTAL = 19;
idx_AlbaranesClientePOBLACION = 20;
idx_AlbaranesClientePROVINCIA = 21;
idx_AlbaranesClientePERSONA_CONTACTO = 22;
idx_AlbaranesClienteTELEFONO = 23;
idx_AlbaranesClienteMOVIL = 24;
idx_AlbaranesClienteIMPORTE_NETO = 25;
idx_AlbaranesClienteIMPORTE_PORTE = 26;
idx_AlbaranesClienteDESCUENTO = 27;
idx_AlbaranesClienteIMPORTE_DESCUENTO = 28;
idx_AlbaranesClienteBASE_IMPONIBLE = 29;
idx_AlbaranesClienteID_TIPO_IVA = 30;
idx_AlbaranesClienteIVA = 31;
idx_AlbaranesClienteIMPORTE_IVA = 32;
idx_AlbaranesClienteIMPORTE_TOTAL = 33;
idx_AlbaranesClienteOBSERVACIONES = 34;
idx_AlbaranesClienteINCIDENCIAS = 35;
idx_AlbaranesClienteINCIDENCIAS_ACTIVAS = 36;
idx_AlbaranesClienteFECHA_ALTA = 37;
idx_AlbaranesClienteFECHA_MODIFICACION = 38;
idx_AlbaranesClienteUSUARIO = 39;
idx_AlbaranesClienteID_FORMA_PAGO = 40;
idx_AlbaranesClienteFECHA_PREVISTA_ENVIO = 41;
idx_AlbaranesClienteFECHA_ENVIO = 42;
idx_AlbaranesClienteFECHA_RECEPCION = 43;
idx_AlbaranesClienteID_TIENDA = 44;
idx_AlbaranesClienteTIENDA = 45;
{ AlbaranesCliente_Detalles fields }
fld_AlbaranesCliente_DetallesID = 'ID';
@ -151,7 +155,7 @@ const
type
{ IListaAnosAlbaranes }
IListaAnosAlbaranes = interface(IDAStronglyTypedDataTable)
['{88848224-91B5-41B0-A2FC-54BCF8BF5AE8}']
['{203EE597-D0C7-4604-A953-891F0E3D98FF}']
{ Property getters and setters }
function GetANOValue: String;
procedure SetANOValue(const aValue: String);
@ -186,8 +190,12 @@ type
{ IAlbaranesCliente }
IAlbaranesCliente = interface(IDAStronglyTypedDataTable)
['{DFD09690-9B1D-4BE5-9101-46589DF1E88E}']
['{D6D78EF6-CA78-4ED9-B294-D1D466E1726B}']
{ Property getters and setters }
function GetID_CONTRATOValue: Integer;
procedure SetID_CONTRATOValue(const aValue: Integer);
function GetID_CONTRATOIsNull: Boolean;
procedure SetID_CONTRATOIsNull(const aValue: Boolean);
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
function GetIDIsNull: Boolean;
@ -240,6 +248,10 @@ type
procedure SetREF_PEDIDOValue(const aValue: String);
function GetREF_PEDIDOIsNull: Boolean;
procedure SetREF_PEDIDOIsNull(const aValue: Boolean);
function GetREF_CONTRATOValue: String;
procedure SetREF_CONTRATOValue(const aValue: String);
function GetREF_CONTRATOIsNull: Boolean;
procedure SetREF_CONTRATOIsNull(const aValue: Boolean);
function GetID_FACTURAValue: Integer;
procedure SetID_FACTURAValue(const aValue: Integer);
function GetID_FACTURAIsNull: Boolean;
@ -365,6 +377,8 @@ type
{ Properties }
property ID_CONTRATO: Integer read GetID_CONTRATOValue write SetID_CONTRATOValue;
property ID_CONTRATOIsNull: Boolean read GetID_CONTRATOIsNull write SetID_CONTRATOIsNull;
property ID: Integer read GetIDValue write SetIDValue;
property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull;
property ID_EMPRESA: Integer read GetID_EMPRESAValue write SetID_EMPRESAValue;
@ -391,6 +405,8 @@ type
property ID_PEDIDOIsNull: Boolean read GetID_PEDIDOIsNull write SetID_PEDIDOIsNull;
property REF_PEDIDO: String read GetREF_PEDIDOValue write SetREF_PEDIDOValue;
property REF_PEDIDOIsNull: Boolean read GetREF_PEDIDOIsNull write SetREF_PEDIDOIsNull;
property REF_CONTRATO: String read GetREF_CONTRATOValue write SetREF_CONTRATOValue;
property REF_CONTRATOIsNull: Boolean read GetREF_CONTRATOIsNull write SetREF_CONTRATOIsNull;
property ID_FACTURA: Integer read GetID_FACTURAValue write SetID_FACTURAValue;
property ID_FACTURAIsNull: Boolean read GetID_FACTURAIsNull write SetID_FACTURAIsNull;
property REF_FACTURA: String read GetREF_FACTURAValue write SetREF_FACTURAValue;
@ -464,6 +480,10 @@ type
procedure INCIDENCIAS_OnChange(Sender: TObject);
protected
{ Property getters and setters }
function GetID_CONTRATOValue: Integer; virtual;
procedure SetID_CONTRATOValue(const aValue: Integer); virtual;
function GetID_CONTRATOIsNull: Boolean; virtual;
procedure SetID_CONTRATOIsNull(const aValue: Boolean); virtual;
function GetIDValue: Integer; virtual;
procedure SetIDValue(const aValue: Integer); virtual;
function GetIDIsNull: Boolean; virtual;
@ -516,6 +536,10 @@ type
procedure SetREF_PEDIDOValue(const aValue: String); virtual;
function GetREF_PEDIDOIsNull: Boolean; virtual;
procedure SetREF_PEDIDOIsNull(const aValue: Boolean); virtual;
function GetREF_CONTRATOValue: String; virtual;
procedure SetREF_CONTRATOValue(const aValue: String); virtual;
function GetREF_CONTRATOIsNull: Boolean; virtual;
procedure SetREF_CONTRATOIsNull(const aValue: Boolean); virtual;
function GetID_FACTURAValue: Integer; virtual;
procedure SetID_FACTURAValue(const aValue: Integer); virtual;
function GetID_FACTURAIsNull: Boolean; virtual;
@ -640,6 +664,8 @@ type
procedure SetTIENDAIsNull(const aValue: Boolean); virtual;
{ Properties }
property ID_CONTRATO: Integer read GetID_CONTRATOValue write SetID_CONTRATOValue;
property ID_CONTRATOIsNull: Boolean read GetID_CONTRATOIsNull write SetID_CONTRATOIsNull;
property ID: Integer read GetIDValue write SetIDValue;
property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull;
property ID_EMPRESA: Integer read GetID_EMPRESAValue write SetID_EMPRESAValue;
@ -666,6 +692,8 @@ type
property ID_PEDIDOIsNull: Boolean read GetID_PEDIDOIsNull write SetID_PEDIDOIsNull;
property REF_PEDIDO: String read GetREF_PEDIDOValue write SetREF_PEDIDOValue;
property REF_PEDIDOIsNull: Boolean read GetREF_PEDIDOIsNull write SetREF_PEDIDOIsNull;
property REF_CONTRATO: String read GetREF_CONTRATOValue write SetREF_CONTRATOValue;
property REF_CONTRATOIsNull: Boolean read GetREF_CONTRATOIsNull write SetREF_CONTRATOIsNull;
property ID_FACTURA: Integer read GetID_FACTURAValue write SetID_FACTURAValue;
property ID_FACTURAIsNull: Boolean read GetID_FACTURAIsNull write SetID_FACTURAIsNull;
property REF_FACTURA: String read GetREF_FACTURAValue write SetREF_FACTURAValue;
@ -737,7 +765,7 @@ type
{ IAlbaranesCliente_Detalles }
IAlbaranesCliente_Detalles = interface(IDAStronglyTypedDataTable)
['{B45193BD-105D-44E3-AF4D-BB43F4A1D1CA}']
['{020AD67D-D6F1-4E13-962A-E7B9FE5F4C5E}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@ -994,6 +1022,27 @@ begin
if DataTable.Editing then DataTable.Fields[idx_AlbaranesClienteINCIDENCIAS].AsVariant := TStringList(Sender).Text;
end;
function TAlbaranesClienteDataTableRules.GetID_CONTRATOValue: Integer;
begin
result := DataTable.Fields[idx_AlbaranesClienteID_CONTRATO].AsInteger;
end;
procedure TAlbaranesClienteDataTableRules.SetID_CONTRATOValue(const aValue: Integer);
begin
DataTable.Fields[idx_AlbaranesClienteID_CONTRATO].AsInteger := aValue;
end;
function TAlbaranesClienteDataTableRules.GetID_CONTRATOIsNull: boolean;
begin
result := DataTable.Fields[idx_AlbaranesClienteID_CONTRATO].IsNull;
end;
procedure TAlbaranesClienteDataTableRules.SetID_CONTRATOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_AlbaranesClienteID_CONTRATO].AsVariant := Null;
end;
function TAlbaranesClienteDataTableRules.GetIDValue: Integer;
begin
result := DataTable.Fields[idx_AlbaranesClienteID].AsInteger;
@ -1267,6 +1316,27 @@ begin
DataTable.Fields[idx_AlbaranesClienteREF_PEDIDO].AsVariant := Null;
end;
function TAlbaranesClienteDataTableRules.GetREF_CONTRATOValue: String;
begin
result := DataTable.Fields[idx_AlbaranesClienteREF_CONTRATO].AsString;
end;
procedure TAlbaranesClienteDataTableRules.SetREF_CONTRATOValue(const aValue: String);
begin
DataTable.Fields[idx_AlbaranesClienteREF_CONTRATO].AsString := aValue;
end;
function TAlbaranesClienteDataTableRules.GetREF_CONTRATOIsNull: boolean;
begin
result := DataTable.Fields[idx_AlbaranesClienteREF_CONTRATO].IsNull;
end;
procedure TAlbaranesClienteDataTableRules.SetREF_CONTRATOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_AlbaranesClienteREF_CONTRATO].AsVariant := Null;
end;
function TAlbaranesClienteDataTableRules.GetID_FACTURAValue: Integer;
begin
result := DataTable.Fields[idx_AlbaranesClienteID_FACTURA].AsInteger;

View File

@ -9,14 +9,14 @@ const
{ Delta rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
RID_ListaAnosAlbaranesDelta = '{D19A666D-8DA1-4DA3-9C5E-70934F26B596}';
RID_AlbaranesClienteDelta = '{EC9EB4AE-4745-4CE3-83EB-C57CAA4CCFCD}';
RID_AlbaranesCliente_DetallesDelta = '{0B383F46-915A-4744-915D-0986E32003B3}';
RID_ListaAnosAlbaranesDelta = '{B498D9C0-EE0A-46DA-A371-702D825BDB3A}';
RID_AlbaranesClienteDelta = '{D704D54E-00E5-4A35-B737-A915BB515300}';
RID_AlbaranesCliente_DetallesDelta = '{999E4300-FF31-4EA7-B81E-287E2000B1BD}';
type
{ IListaAnosAlbaranesDelta }
IListaAnosAlbaranesDelta = interface(IListaAnosAlbaranes)
['{D19A666D-8DA1-4DA3-9C5E-70934F26B596}']
['{B498D9C0-EE0A-46DA-A371-702D825BDB3A}']
{ Property getters and setters }
function GetOldANOValue : String;
@ -50,8 +50,9 @@ type
{ IAlbaranesClienteDelta }
IAlbaranesClienteDelta = interface(IAlbaranesCliente)
['{EC9EB4AE-4745-4CE3-83EB-C57CAA4CCFCD}']
['{D704D54E-00E5-4A35-B737-A915BB515300}']
{ Property getters and setters }
function GetOldID_CONTRATOValue : Integer;
function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer;
function GetOldID_CLIENTEValue : Integer;
@ -65,6 +66,7 @@ type
function GetOldNOMBRE_ALMACENValue : String;
function GetOldID_PEDIDOValue : Integer;
function GetOldREF_PEDIDOValue : String;
function GetOldREF_CONTRATOValue : String;
function GetOldID_FACTURAValue : Integer;
function GetOldREF_FACTURAValue : String;
function GetOldID_DIRECCIONValue : Integer;
@ -98,6 +100,7 @@ type
function GetOldTIENDAValue : String;
{ Properties }
property OldID_CONTRATO : Integer read GetOldID_CONTRATOValue;
property OldID : Integer read GetOldIDValue;
property OldID_EMPRESA : Integer read GetOldID_EMPRESAValue;
property OldID_CLIENTE : Integer read GetOldID_CLIENTEValue;
@ -111,6 +114,7 @@ type
property OldNOMBRE_ALMACEN : String read GetOldNOMBRE_ALMACENValue;
property OldID_PEDIDO : Integer read GetOldID_PEDIDOValue;
property OldREF_PEDIDO : String read GetOldREF_PEDIDOValue;
property OldREF_CONTRATO : String read GetOldREF_CONTRATOValue;
property OldID_FACTURA : Integer read GetOldID_FACTURAValue;
property OldREF_FACTURA : String read GetOldREF_FACTURAValue;
property OldID_DIRECCION : Integer read GetOldID_DIRECCIONValue;
@ -153,6 +157,12 @@ type
procedure INCIDENCIAS_OnChange(Sender: TObject);
protected
{ Property getters and setters }
function GetID_CONTRATOValue: Integer; virtual;
function GetID_CONTRATOIsNull: Boolean; virtual;
function GetOldID_CONTRATOValue: Integer; virtual;
function GetOldID_CONTRATOIsNull: Boolean; virtual;
procedure SetID_CONTRATOValue(const aValue: Integer); virtual;
procedure SetID_CONTRATOIsNull(const aValue: Boolean); virtual;
function GetIDValue: Integer; virtual;
function GetIDIsNull: Boolean; virtual;
function GetOldIDValue: Integer; virtual;
@ -231,6 +241,12 @@ type
function GetOldREF_PEDIDOIsNull: Boolean; virtual;
procedure SetREF_PEDIDOValue(const aValue: String); virtual;
procedure SetREF_PEDIDOIsNull(const aValue: Boolean); virtual;
function GetREF_CONTRATOValue: String; virtual;
function GetREF_CONTRATOIsNull: Boolean; virtual;
function GetOldREF_CONTRATOValue: String; virtual;
function GetOldREF_CONTRATOIsNull: Boolean; virtual;
procedure SetREF_CONTRATOValue(const aValue: String); virtual;
procedure SetREF_CONTRATOIsNull(const aValue: Boolean); virtual;
function GetID_FACTURAValue: Integer; virtual;
function GetID_FACTURAIsNull: Boolean; virtual;
function GetOldID_FACTURAValue: Integer; virtual;
@ -417,6 +433,10 @@ type
procedure SetTIENDAIsNull(const aValue: Boolean); virtual;
{ Properties }
property ID_CONTRATO : Integer read GetID_CONTRATOValue write SetID_CONTRATOValue;
property ID_CONTRATOIsNull : Boolean read GetID_CONTRATOIsNull write SetID_CONTRATOIsNull;
property OldID_CONTRATO : Integer read GetOldID_CONTRATOValue;
property OldID_CONTRATOIsNull : Boolean read GetOldID_CONTRATOIsNull;
property ID : Integer read GetIDValue write SetIDValue;
property IDIsNull : Boolean read GetIDIsNull write SetIDIsNull;
property OldID : Integer read GetOldIDValue;
@ -469,6 +489,10 @@ type
property REF_PEDIDOIsNull : Boolean read GetREF_PEDIDOIsNull write SetREF_PEDIDOIsNull;
property OldREF_PEDIDO : String read GetOldREF_PEDIDOValue;
property OldREF_PEDIDOIsNull : Boolean read GetOldREF_PEDIDOIsNull;
property REF_CONTRATO : String read GetREF_CONTRATOValue write SetREF_CONTRATOValue;
property REF_CONTRATOIsNull : Boolean read GetREF_CONTRATOIsNull write SetREF_CONTRATOIsNull;
property OldREF_CONTRATO : String read GetOldREF_CONTRATOValue;
property OldREF_CONTRATOIsNull : Boolean read GetOldREF_CONTRATOIsNull;
property ID_FACTURA : Integer read GetID_FACTURAValue write SetID_FACTURAValue;
property ID_FACTURAIsNull : Boolean read GetID_FACTURAIsNull write SetID_FACTURAIsNull;
property OldID_FACTURA : Integer read GetOldID_FACTURAValue;
@ -602,7 +626,7 @@ type
{ IAlbaranesCliente_DetallesDelta }
IAlbaranesCliente_DetallesDelta = interface(IAlbaranesCliente_Detalles)
['{0B383F46-915A-4744-915D-0986E32003B3}']
['{999E4300-FF31-4EA7-B81E-287E2000B1BD}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_ALBARANValue : Integer;
@ -869,6 +893,37 @@ begin
BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteINCIDENCIAS] := TStringList(Sender).Text;
end;
function TAlbaranesClienteBusinessProcessorRules.GetID_CONTRATOValue: Integer;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteID_CONTRATO];
end;
function TAlbaranesClienteBusinessProcessorRules.GetID_CONTRATOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteID_CONTRATO]);
end;
function TAlbaranesClienteBusinessProcessorRules.GetOldID_CONTRATOValue: Integer;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_AlbaranesClienteID_CONTRATO];
end;
function TAlbaranesClienteBusinessProcessorRules.GetOldID_CONTRATOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_AlbaranesClienteID_CONTRATO]);
end;
procedure TAlbaranesClienteBusinessProcessorRules.SetID_CONTRATOValue(const aValue: Integer);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteID_CONTRATO] := aValue;
end;
procedure TAlbaranesClienteBusinessProcessorRules.SetID_CONTRATOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteID_CONTRATO] := Null;
end;
function TAlbaranesClienteBusinessProcessorRules.GetIDValue: Integer;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteID];
@ -1272,6 +1327,37 @@ begin
BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteREF_PEDIDO] := Null;
end;
function TAlbaranesClienteBusinessProcessorRules.GetREF_CONTRATOValue: String;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteREF_CONTRATO];
end;
function TAlbaranesClienteBusinessProcessorRules.GetREF_CONTRATOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteREF_CONTRATO]);
end;
function TAlbaranesClienteBusinessProcessorRules.GetOldREF_CONTRATOValue: String;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_AlbaranesClienteREF_CONTRATO];
end;
function TAlbaranesClienteBusinessProcessorRules.GetOldREF_CONTRATOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_AlbaranesClienteREF_CONTRATO]);
end;
procedure TAlbaranesClienteBusinessProcessorRules.SetREF_CONTRATOValue(const aValue: String);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteREF_CONTRATO] := aValue;
end;
procedure TAlbaranesClienteBusinessProcessorRules.SetREF_CONTRATOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteREF_CONTRATO] := Null;
end;
function TAlbaranesClienteBusinessProcessorRules.GetID_FACTURAValue: Integer;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteID_FACTURA];

View File

@ -223,10 +223,23 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
item
DatasetField = 'MOVIL'
TableField = 'MOVIL'
end
item
DatasetField = 'ID_CONTRATO'
TableField = 'ID_CONTRATO'
end
item
DatasetField = 'REF_CONTRATO'
TableField = 'REF_CONTRATO'
end>
end>
Name = 'AlbaranesCliente'
Fields = <
item
Name = 'ID_CONTRATO'
DataType = datInteger
DictionaryEntry = 'AlbaranesCliente_ID_CONTRATO'
end
item
Name = 'ID'
DataType = datAutoInc
@ -304,6 +317,12 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
Size = 255
DictionaryEntry = 'AlbaranesCliente_REF_PEDIDO'
end
item
Name = 'REF_CONTRATO'
DataType = datString
Size = 255
DictionaryEntry = 'AlbaranesCliente_REF_CONTRATO'
end
item
Name = 'ID_FACTURA'
DataType = datInteger
@ -366,6 +385,7 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
Name = 'MOVIL'
DataType = datString
Size = 25
DictionaryEntry = 'AlbaranesCliente_MOVIL'
end
item
Name = 'IMPORTE_NETO'
@ -395,6 +415,7 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
item
Name = 'ID_TIPO_IVA'
DataType = datInteger
DictionaryEntry = 'AlbaranesCliente_ID_TIPO_IVA'
end
item
Name = 'IVA'
@ -686,6 +707,11 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
DataType = datInteger
Value = ''
end
item
Name = 'ID_CONTRATO'
DataType = datInteger
Value = ''
end
item
Name = 'ID_FACTURA'
DataType = datInteger
@ -837,22 +863,23 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
SQL =
'INSERT'#10' INTO ALBARANES_CLIENTE'#10' (ID, ID_EMPRESA, ID_CLIENTE,' +
' FECHA_ALBARAN, TIPO, REFERENCIA,'#10' REFERENCIA_CLIENTE, ID_AL' +
'MACEN, ID_PEDIDO, ID_FACTURA, ID_DIRECCION,'#10' CALLE, CODIGO_P' +
'OSTAL, POBLACION, PROVINCIA, PERSONA_CONTACTO,'#10' TELEFONO, MO' +
'VIL, IMPORTE_NETO, IMPORTE_PORTE, DESCUENTO, IMPORTE_DESCUENTO,'#10 +
' BASE_IMPONIBLE, IVA, IMPORTE_IVA, IMPORTE_TOTAL, OBSERVACIO' +
'NES, '#10' INCIDENCIAS, INCIDENCIAS_ACTIVAS, FECHA_ALTA, FECHA_M' +
'ODIFICACION, '#10' USUARIO, ID_FORMA_PAGO, FECHA_PREVISTA_ENVIO,' +
' FECHA_ENVIO, '#10' FECHA_RECEPCION, ID_TIENDA)'#10' VALUES'#10' (:I' +
'D, :ID_EMPRESA, :ID_CLIENTE, :FECHA_ALBARAN, :TIPO, :REFERENCIA,' +
#10' :REFERENCIA_CLIENTE, :ID_ALMACEN, :ID_PEDIDO, :ID_FACTURA,' +
' :ID_DIRECCION,'#10' :CALLE, :CODIGO_POSTAL, :POBLACION, :PROVIN' +
'CIA, :PERSONA_CONTACTO,'#10' :TELEFONO, :MOVIL, :IMPORTE_NETO, :' +
'IMPORTE_PORTE, :DESCUENTO, :IMPORTE_DESCUENTO,'#10' :BASE_IMPONI' +
'BLE, :IVA, :IMPORTE_IVA, :IMPORTE_TOTAL, :OBSERVACIONES,'#10' :I' +
'NCIDENCIAS, :INCIDENCIAS_ACTIVAS, CURRENT_TIMESTAMP, :FECHA_MODI' +
'FICACION,'#10' :USUARIO, :ID_FORMA_PAGO, :FECHA_PREVISTA_ENVIO, ' +
':FECHA_ENVIO, :FECHA_RECEPCION,'#10' :ID_TIENDA)'#10' '#10' '#10#10
'MACEN, ID_PEDIDO, ID_FACTURA, ID_CONTRATO, ID_DIRECCION,'#10' CA' +
'LLE, CODIGO_POSTAL, POBLACION, PROVINCIA, PERSONA_CONTACTO,'#10' ' +
' TELEFONO, MOVIL, IMPORTE_NETO, IMPORTE_PORTE, DESCUENTO, IMPORT' +
'E_DESCUENTO,'#10' BASE_IMPONIBLE, IVA, IMPORTE_IVA, IMPORTE_TOTA' +
'L, OBSERVACIONES, '#10' INCIDENCIAS, INCIDENCIAS_ACTIVAS, FECHA_' +
'ALTA, FECHA_MODIFICACION, '#10' USUARIO, ID_FORMA_PAGO, FECHA_PR' +
'EVISTA_ENVIO, FECHA_ENVIO, '#10' FECHA_RECEPCION, ID_TIENDA)'#10' V' +
'ALUES'#10' (:ID, :ID_EMPRESA, :ID_CLIENTE, :FECHA_ALBARAN, :TIPO,' +
' :REFERENCIA,'#10' :REFERENCIA_CLIENTE, :ID_ALMACEN, :ID_PEDIDO,' +
' :ID_FACTURA, :ID_CONTRATO, :ID_DIRECCION,'#10' :CALLE, :CODIGO_' +
'POSTAL, :POBLACION, :PROVINCIA, :PERSONA_CONTACTO,'#10' :TELEFON' +
'O, :MOVIL, :IMPORTE_NETO, :IMPORTE_PORTE, :DESCUENTO, :IMPORTE_D' +
'ESCUENTO,'#10' :BASE_IMPONIBLE, :IVA, :IMPORTE_IVA, :IMPORTE_TOT' +
'AL, :OBSERVACIONES,'#10' :INCIDENCIAS, :INCIDENCIAS_ACTIVAS, CUR' +
'RENT_TIMESTAMP, :FECHA_MODIFICACION,'#10' :USUARIO, :ID_FORMA_PA' +
'GO, :FECHA_PREVISTA_ENVIO, :FECHA_ENVIO, :FECHA_RECEPCION,'#10' ' +
':ID_TIENDA)'#10' '#10' '#10#10
StatementType = stSQL
ColumnMappings = <>
end>
@ -877,6 +904,11 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
end
item
Params = <
item
Name = 'ID_CONTRATO'
DataType = datInteger
Value = ''
end
item
Name = 'ID_EMPRESA'
DataType = datInteger
@ -1073,21 +1105,21 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
#10' TIPO = :TIPO,'#10' REFERENCIA = :REFERENCIA, '#10' REFERENCIA' +
'_CLIENTE = :REFERENCIA_CLIENTE, '#10' ID_ALMACEN = :ID_ALMACEN,'#10' ' +
' ID_PEDIDO = :ID_PEDIDO,'#10' ID_FACTURA = :ID_FACTURA,'#10' ID_' +
'DIRECCION = :ID_DIRECCION,'#10' CALLE = :CALLE,'#10' CODIGO_POSTAL' +
' = :CODIGO_POSTAL, '#10' POBLACION = :POBLACION, '#10' PROVINCIA =' +
' :PROVINCIA, '#10' PERSONA_CONTACTO = :PERSONA_CONTACTO, '#10' TEL' +
'EFONO = :TELEFONO, '#10' MOVIL = :MOVIL,'#10' IMPORTE_NETO = :IMPO' +
'RTE_NETO, '#10' IMPORTE_PORTE = :IMPORTE_PORTE, '#10' DESCUENTO = ' +
':DESCUENTO, '#10' IMPORTE_DESCUENTO = :IMPORTE_DESCUENTO, '#10' BA' +
'SE_IMPONIBLE = :BASE_IMPONIBLE, '#10' IVA = :IVA, '#10' IMPORTE_IV' +
'A = :IMPORTE_IVA, '#10' IMPORTE_TOTAL = :IMPORTE_TOTAL, '#10' OBSE' +
'RVACIONES = :OBSERVACIONES, '#10' INCIDENCIAS = :INCIDENCIAS, '#10' ' +
' INCIDENCIAS_ACTIVAS = :INCIDENCIAS_ACTIVAS, '#10' FECHA_MODIFIC' +
'ACION = CURRENT_TIMESTAMP,'#10' USUARIO = :USUARIO, '#10' ID_FORMA' +
'_PAGO = :ID_FORMA_PAGO, '#10' FECHA_PREVISTA_ENVIO = :FECHA_PREVI' +
'STA_ENVIO, '#10' FECHA_ENVIO = :FECHA_ENVIO, '#10' FECHA_RECEPCION' +
' = :FECHA_RECEPCION,'#10' ID_TIENDA = :ID_TIENDA'#10' WHERE'#10' (ID ' +
'= :OLD_ID)'#10
'CONTRATO = :ID_CONTRATO,'#10' ID_DIRECCION = :ID_DIRECCION,'#10' C' +
'ALLE = :CALLE,'#10' CODIGO_POSTAL = :CODIGO_POSTAL, '#10' POBLACIO' +
'N = :POBLACION, '#10' PROVINCIA = :PROVINCIA, '#10' PERSONA_CONTAC' +
'TO = :PERSONA_CONTACTO, '#10' TELEFONO = :TELEFONO, '#10' MOVIL = ' +
':MOVIL,'#10' IMPORTE_NETO = :IMPORTE_NETO, '#10' IMPORTE_PORTE = :' +
'IMPORTE_PORTE, '#10' DESCUENTO = :DESCUENTO, '#10' IMPORTE_DESCUEN' +
'TO = :IMPORTE_DESCUENTO, '#10' BASE_IMPONIBLE = :BASE_IMPONIBLE, ' +
#10' IVA = :IVA, '#10' IMPORTE_IVA = :IMPORTE_IVA, '#10' IMPORTE_T' +
'OTAL = :IMPORTE_TOTAL, '#10' OBSERVACIONES = :OBSERVACIONES, '#10' ' +
' INCIDENCIAS = :INCIDENCIAS, '#10' INCIDENCIAS_ACTIVAS = :INCIDEN' +
'CIAS_ACTIVAS, '#10' FECHA_MODIFICACION = CURRENT_TIMESTAMP,'#10' U' +
'SUARIO = :USUARIO, '#10' ID_FORMA_PAGO = :ID_FORMA_PAGO, '#10' FEC' +
'HA_PREVISTA_ENVIO = :FECHA_PREVISTA_ENVIO, '#10' FECHA_ENVIO = :F' +
'ECHA_ENVIO, '#10' FECHA_RECEPCION = :FECHA_RECEPCION,'#10' ID_TIEN' +
'DA = :ID_TIENDA'#10' WHERE'#10' (ID = :OLD_ID)'#10
StatementType = stSQL
ColumnMappings = <>
end>
@ -1685,6 +1717,26 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
DataType = datString
Size = 255
ServerAutoRefresh = True
end
item
Name = 'AlbaranesCliente_ID_CONTRATO'
DataType = datInteger
DisplayLabel = 'ID_CONTRATO'
end
item
Name = 'AlbaranesCliente_REF_CONTRATO'
DataType = datString
Size = 255
DisplayLabel = 'Ref. contrato cliente'
end
item
Name = 'AlbaranesCliente_MOVIL'
DataType = datString
Size = 25
end
item
Name = 'AlbaranesCliente_ID_TIPO_IVA'
DataType = datInteger
end>
Left = 48
Top = 136

View File

@ -32,7 +32,9 @@ requires
AlbaranesCliente_controller,
Articulos_view,
Almacenes_controller,
AlbCli_FacCli_relation;
AlbCli_FacCli_relation,
ContratosCliente_controller,
ConCli_AlbCli_relation;
contains
uAlbaranesClienteViewRegister in 'uAlbaranesClienteViewRegister.pas',

View File

@ -43,6 +43,18 @@
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Package_Options><Package_Options Name="ImplicitBuild">False</Package_Options><Package_Options Name="DesigntimeOnly">False</Package_Options><Package_Options Name="RuntimeOnly">False</Package_Options></Package_Options><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">3082</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dclIntraweb_80_100.bpl">File c:\archivos de programa\borland\delphi10\Bin\dclIntraweb_80_100.bpl not found</Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dclnet100.bpl">File c:\archivos de programa\borland\delphi10\Bin\dclnet100.bpl not found</Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dclsoap100.bpl">File c:\archivos de programa\borland\delphi10\Bin\dclsoap100.bpl not found</Excluded_Packages>
@ -54,14 +66,16 @@
<DelphiCompile Include="AlbaranesCliente_view.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\AlbaranesCliente_controller.dcp" />
<DCCReference Include="..\AlbaranesCliente_model.dcp" />
<DCCReference Include="..\AlbCli_FacCli_relation.dcp" />
<DCCReference Include="..\Almacenes_controller.dcp" />
<DCCReference Include="..\ApplicationBase.dcp" />
<DCCReference Include="..\Articulos_view.dcp" />
<DCCReference Include="..\Base.dcp" />
<DCCReference Include="..\GUIBase.dcp" />
<DCCReference Include="..\..\Lib\AlbaranesCliente_controller.dcp" />
<DCCReference Include="..\..\Lib\AlbaranesCliente_model.dcp" />
<DCCReference Include="..\..\Lib\AlbCli_FacCli_relation.dcp" />
<DCCReference Include="..\..\Lib\Almacenes_controller.dcp" />
<DCCReference Include="..\..\Lib\ApplicationBase.dcp" />
<DCCReference Include="..\..\Lib\Articulos_view.dcp" />
<DCCReference Include="..\..\Lib\Base.dcp" />
<DCCReference Include="..\..\Lib\ConCli_AlbCli_relation.dcp" />
<DCCReference Include="..\..\Lib\ContratosCliente_controller.dcp" />
<DCCReference Include="..\..\Lib\GUIBase.dcp" />
<DCCReference Include="uAlbaranesClienteViewRegister.pas" />
<DCCReference Include="uEditorAlbaranCliente.pas">
<Form>fEditorAlbaranCliente</Form>

View File

@ -201,12 +201,19 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente
inherited TBXDock1: TTBXDock
Width = 751
ExplicitWidth = 751
inherited TBXToolbar1: TTBXToolbar
ExplicitWidth = 548
end
end
end
end
object pagInicidencias: TTabSheet
Caption = 'Incidencias'
ImageIndex = 2
ExplicitLeft = 0
ExplicitTop = 0
ExplicitWidth = 0
ExplicitHeight = 0
inline frViewIncidenciasCli: TfrViewIncidencias
Left = 0
Top = 0
@ -441,10 +448,6 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente
inherited PnlComentario: TPanel [5]
Width = 765
ExplicitWidth = 765
inherited lbComentario: TLabel
Width = 755
Height = 25
end
end
inherited EditorActionList: TActionList [9]
Left = 32

View File

@ -2,7 +2,6 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
Caption = 'Lista de albaranes de cliente'
ClientWidth = 583
ExplicitWidth = 591
ExplicitHeight = 240
PixelsPerInch = 96
TextHeight = 13
inherited JvNavPanelHeader: TJvNavPanelHeader
@ -148,7 +147,7 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
Left = 431
Visible = True
ExplicitLeft = 431
ExplicitWidth = 152
ExplicitWidth = 129
object TBXItem42: TTBXItem
Action = actEnviar
DisplayMode = nbdmImageAndText
@ -202,28 +201,36 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
object actEnviar: TAction
Category = 'Acciones'
Caption = 'Enviar albar'#225'n...'
Enabled = False
ImageIndex = 23
Visible = False
OnExecute = actEnviarExecute
OnUpdate = actEnviarUpdate
end
object actCancelarEnvio: TAction
Category = 'Acciones'
Caption = 'Cancelar envio'
Enabled = False
ImageIndex = 23
Visible = False
OnExecute = actCancelarEnvioExecute
OnUpdate = actCancelarEnvioUpdate
end
object actConfirmarRecepcion: TAction
Category = 'Acciones'
Caption = 'Confirmar recepcion'
Enabled = False
ImageIndex = 23
Visible = False
OnExecute = actConfirmarRecepcionExecute
OnUpdate = actConfirmarRecepcionUpdate
end
object actGenerarEtiquetas: TAction
Category = 'Acciones'
Caption = 'Generar etiquetas'
Enabled = False
ImageIndex = 23
Visible = False
OnExecute = actGenerarEtiquetasExecute
OnUpdate = actGenerarEtiquetasUpdate
end
@ -1672,10 +1679,7 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
object N4: TMenuItem [5]
Caption = '-'
end
object Serviralbarn1: TMenuItem [6]
Action = actEnviar
end
object Generarfactura1: TMenuItem [7]
object Generarfactura1: TMenuItem [6]
Action = actGenerarFactura
end
end
@ -1749,12 +1753,12 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
Value = 100
end
item
Caption = 'Utilizar un pedido de cliente.'
Value = 200
Caption = 'Utilizar un contrato de cliente.'
Value = 300
Info.Strings = (
'Puede utilizar un pedido de cliente existente para dar de alta e' +
'l albar'#225'n nuevo.')
'Puede utilizar un contrato de cliente existente para dar de alta' +
' el albar'#225'n nuevo.')
end>
ButtonBar.Buttons = [cbCancel]
MainIcon = tdiCustom

View File

@ -22,7 +22,6 @@ type
Generarfactura1: TMenuItem;
TBXSeparatorItem17: TTBXSeparatorItem;
actEnviar: TAction;
Serviralbarn1: TMenuItem;
JsImprimirDialog: TJSDialog;
JsPrevisualizarDialog: TJSDialog;
actCancelarEnvio: TAction;
@ -85,11 +84,8 @@ implementation
uses
uDataModuleAlbaranesCliente, uDataModuleUsuarios, uFactuGES_App,
//En tecsitel no estaran habilitados los pedidos
// uPedidosClienteController, uBizPedidosCliente,
uDialogUtils, schAlbaranesClienteClient_Intf, uGenerarFacturasCliAlbCliUtils,
// uFacturasClienteController, uBizFacturasCliente, uGenerarAlbaranesCliUtils,
// uInventarioController,
uGenerarAlbaranesCliUtils,
uEditorBase,
cxCustomData, uGridUtils, uDBSelectionListUtils;
@ -251,11 +247,11 @@ end;
procedure TfEditorAlbaranesCliente.actEnviarUpdate(Sender: TObject);
begin
inherited;
{ inherited;
(Sender as TAction).Enabled := HayDatos
and not (ViewGrid.NumSeleccionados > 1)
and ViewGrid.esSeleccionCeldaDatos
and (FAlbaranes.SITUACION = SITUACION_ALBARAN_PENDIENTE);
and (FAlbaranes.SITUACION = SITUACION_ALBARAN_PENDIENTE);}
end;
procedure TfEditorAlbaranesCliente.AsignarVista;
@ -431,34 +427,32 @@ begin
end;
procedure TfEditorAlbaranesCliente.NuevoInterno;
{var
var
Respuesta : Integer;
AAlbaran : IBizAlbaranCliente;
IDAlbaranAux: Integer;}
IDAlbaranAux: Integer;
begin
inherited;
if FController.Anadir(Albaranes) then
FController.Ver(Albaranes);
//Se deshabilita la funcionalidad para poder generar un albarán a partir de un presupuesto
{ Respuesta := JsNuevoAlbaranDialog.Execute;
Respuesta := JsNuevoAlbaranDialog.Execute;
if Respuesta <> IDCANCEL then
begin
case JsNuevoAlbaranDialog.CustomButtonResult of
200 : begin // Utilizar un pedido
// if ElegirPedidoYGenerarAlbaranCli(IDAlbaranAux) then
{200 : begin // Utilizar un pedido
if ElegirPedidoYGenerarAlbaranCli(IDAlbaranAux) then
actRefrescar.Execute;
end;
end;}
100 : begin // Albaran nuevo vacio
if FController.Anadir(Albaranes) then
FController.Ver(Albaranes);
end;
300 : begin // Utilizar un contrato
if ElegirContratoYGenerarAlbaranCli(IDAlbaranAux) then
actRefrescar.Execute;
end;
end;
end;
}
end;
procedure TfEditorAlbaranesCliente.OnListaAnosChange(Sender: TObject; const Text: string);

View File

@ -1,25 +1,25 @@
inherited frViewAlbaranCliente: TfrViewAlbaranCliente
Width = 825
Height = 512
Width = 947
Height = 644
OnCreate = CustomViewCreate
OnDestroy = CustomViewDestroy
ExplicitWidth = 825
ExplicitHeight = 512
ExplicitWidth = 947
ExplicitHeight = 644
object dxLayoutControl1: TdxLayoutControl
Left = 0
Top = 0
Width = 825
Height = 512
Width = 947
Height = 644
Align = alClient
ParentBackground = True
TabOrder = 0
TabStop = False
AutoContentSizes = [acsWidth, acsHeight]
DesignSize = (
825
512)
947
644)
object Label1: TLabel
Left = 344
Left = 546
Top = 622
Width = 299
Height = 26
@ -81,7 +81,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
Width = 284
end
inline frViewClienteAlbaran: TfrViewDatosYSeleccionClienteAlbaran
Left = 344
Left = 546
Top = 28
Width = 442
Height = 221
@ -91,46 +91,32 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
TabOrder = 10
TabOrder = 12
ReadOnly = False
ExplicitLeft = 344
ExplicitLeft = 546
ExplicitTop = 28
ExplicitWidth = 442
ExplicitHeight = 221
inherited dxLayoutControl1: TdxLayoutControl
Width = 442
Height = 221
ExplicitWidth = 452
ExplicitHeight = 226
inherited edtlNombre: TcxDBTextEdit
ExplicitWidth = 224
Width = 224
end
inherited edtNIFCIF: TcxDBTextEdit
ExplicitWidth = 103
Width = 103
end
ExplicitWidth = 442
ExplicitHeight = 221
inherited bVerFichaCliente: TBitBtn
Left = 240
ExplicitLeft = 240
end
inherited edtDireccion: TcxMemo
ExplicitWidth = 437
Width = 437
Left = 160
ExplicitLeft = 160
end
inherited bElegirDireccion: TButton
Left = 409
ExplicitLeft = 409
Left = 329
ExplicitLeft = 329
end
inherited edtTelefonos: TcxTextEdit
ExplicitWidth = 193
Width = 193
end
inherited edtReferencia: TcxDBTextEdit
Left = 282
ExplicitLeft = 282
ExplicitWidth = 103
Width = 103
Left = 242
ExplicitLeft = 242
end
end
inherited ActionList1: TActionList
@ -141,7 +127,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
end
end
object eCalle: TcxDBTextEdit
Left = 438
Left = 640
Top = 396
DataBinding.DataField = 'CALLE'
DataBinding.DataSource = DADataSource
@ -156,11 +142,11 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 14
TabOrder = 16
Width = 284
end
object ePoblacion: TcxDBTextEdit
Left = 438
Left = 640
Top = 423
DataBinding.DataField = 'POBLACION'
DataBinding.DataSource = DADataSource
@ -175,11 +161,11 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 15
TabOrder = 17
Width = 61
end
object eCodigoPostal: TcxDBTextEdit
Left = 721
Left = 843
Top = 423
DataBinding.DataField = 'CODIGO_POSTAL'
DataBinding.DataSource = DADataSource
@ -194,11 +180,11 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 16
TabOrder = 18
Width = 65
end
object eProvincia: TcxDBTextEdit
Left = 438
Left = 640
Top = 450
DataBinding.DataField = 'PROVINCIA'
DataBinding.DataSource = DADataSource
@ -213,11 +199,11 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 17
TabOrder = 19
Width = 406
end
object ePersonaContacto: TcxDBTextEdit
Left = 438
Left = 640
Top = 477
DataBinding.DataField = 'PERSONA_CONTACTO'
DataBinding.DataSource = DADataSource
@ -233,11 +219,11 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 18
TabOrder = 20
Width = 284
end
object eTlfTrabajo: TcxDBTextEdit
Left = 438
Left = 640
Top = 504
DataBinding.DataField = 'TELEFONO'
DataBinding.DataSource = DADataSource
@ -252,20 +238,20 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 19
TabOrder = 21
Width = 284
end
object bElegirDireccion: TBitBtn
Left = 614
Left = 736
Top = 531
Width = 172
Height = 23
Action = actElegirDireccion
Caption = 'Elegir una direcci'#243'n de env'#237'o...'
TabOrder = 20
TabOrder = 22
end
object Button1: TButton
Left = 182
Left = 384
Top = 138
Width = 132
Height = 23
@ -327,7 +313,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
Width = 146
end
object bFormasPago: TButton
Left = 182
Left = 384
Top = 109
Width = 132
Height = 23
@ -336,7 +322,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
OnClick = bFormasPagoClick
end
object eFechaRecepcion: TcxDBDateEdit
Left = 478
Left = 680
Top = 339
Anchors = [akLeft, akTop, akRight]
DataBinding.DataField = 'FECHA_RECEPCION'
@ -357,20 +343,20 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 13
TabOrder = 15
Width = 239
end
object cbConAlmacen: TCheckBox
Left = 354
Left = 556
Top = 590
Width = 179
Height = 21
Caption = 'Asociar este albar'#225'n al almac'#233'n:'
TabOrder = 21
TabOrder = 23
OnClick = cbConAlmacenClick
end
object cbAlmacen: TcxDBLookupComboBox
Left = 539
Left = 741
Top = 590
DataBinding.DataField = 'ID_ALMACEN'
DataBinding.DataSource = DADataSource
@ -396,12 +382,12 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 22
TabOrder = 24
Width = 586
end
object eRefFacturaCli: TcxDBTextEdit
Left = 116
Top = 167
Top = 196
Anchors = [akLeft, akTop, akRight]
DataBinding.DataField = 'REF_FACTURA'
DataBinding.DataSource = DADataSource
@ -422,11 +408,11 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 7
TabOrder = 9
Width = 284
end
object eFechaPrevista: TcxDBDateEdit
Left = 478
Left = 680
Top = 285
Anchors = [akLeft, akTop, akRight]
DataBinding.DataField = 'FECHA_PREVISTA_ENVIO'
@ -449,7 +435,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 11
TabOrder = 13
Width = 202
end
object eRefCliente: TcxDBTextEdit
@ -478,7 +464,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
Width = 284
end
object eFechaEnvio: TcxDBDateEdit
Left = 478
Left = 680
Top = 312
Anchors = [akLeft, akTop, akRight]
DataBinding.DataField = 'FECHA_ENVIO'
@ -499,12 +485,12 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 12
TabOrder = 14
Width = 239
end
inline frViewTienda1: TfrViewTienda
Left = 22
Top = 224
Top = 253
Width = 373
Height = 41
Font.Charset = DEFAULT_CHARSET
@ -513,10 +499,10 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
TabOrder = 8
TabOrder = 10
ReadOnly = False
ExplicitLeft = 22
ExplicitTop = 224
ExplicitTop = 253
ExplicitWidth = 373
inherited dxLayoutControl1: TdxLayoutControl
Width = 373
@ -529,7 +515,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
end
inline frViewObservaciones1: TfrViewObservaciones
Left = 22
Top = 301
Top = 330
Width = 521
Height = 228
Font.Charset = DEFAULT_CHARSET
@ -538,10 +524,10 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
TabOrder = 9
TabOrder = 11
ReadOnly = False
ExplicitLeft = 22
ExplicitTop = 301
ExplicitTop = 330
ExplicitHeight = 228
inherited memObservaciones: TcxDBMemo
DataBinding.DataField = 'OBSERVACIONES'
@ -550,6 +536,40 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
Height = 228
end
end
object eRefContratoCli: TcxDBTextEdit
Left = 116
Top = 167
Anchors = [akLeft, akTop, akRight]
DataBinding.DataField = 'REF_CONTRATO'
DataBinding.DataSource = DADataSource
Enabled = False
Properties.ReadOnly = False
Properties.ValidateOnEnter = True
Style.BorderColor = clWindowFrame
Style.BorderStyle = ebs3D
Style.Color = clWindow
Style.HotTrack = False
Style.LookAndFeel.Kind = lfStandard
Style.LookAndFeel.NativeStyle = True
StyleDisabled.Color = clMenuBar
StyleDisabled.LookAndFeel.Kind = lfStandard
StyleDisabled.LookAndFeel.NativeStyle = True
StyleDisabled.TextColor = clWindowText
StyleFocused.LookAndFeel.Kind = lfStandard
StyleFocused.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.Kind = lfStandard
StyleHot.LookAndFeel.NativeStyle = True
TabOrder = 7
Width = 247
end
object Button2: TButton
Left = 369
Top = 167
Width = 147
Height = 23
Action = actVerContratoCli
TabOrder = 8
end
object dxLayoutControl1Group_Root: TdxLayoutGroup
ShowCaption = False
Hidden = True
@ -631,6 +651,22 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
ControlOptions.ShowBorder = False
end
end
object dxLayoutControl1Group16: TdxLayoutGroup
ShowCaption = False
Hidden = True
LayoutDirection = ldHorizontal
ShowBorder = False
object dxLayoutControl1Item25: TdxLayoutItem
Caption = 'Ref. contrato:'
Control = eRefContratoCli
ControlOptions.ShowBorder = False
end
object dxLayoutControl1Item26: TdxLayoutItem
ShowCaption = False
Control = Button2
ControlOptions.ShowBorder = False
end
end
object dxLayoutControl1Item22: TdxLayoutItem
Caption = 'Ref. factura:'
Control = eRefFacturaCli
@ -796,6 +832,14 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
end
end
end
object cxDBTextEdit1: TcxDBTextEdit
Left = 176
Top = 236
DataBinding.DataField = 'REF_CONTRATO'
DataBinding.DataSource = DADataSource
TabOrder = 1
Width = 297
end
object DADataSource: TDADataSource
Left = 48
end
@ -810,6 +854,11 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente
OnExecute = actVerPedidoCliExecute
OnUpdate = actVerPedidoCliUpdate
end
object actVerContratoCli: TAction
Caption = 'Ver el contrato de cliente...'
OnExecute = actVerContratoCliExecute
OnUpdate = actVerContratoCliUpdate
end
end
object dsFormaPago: TDADataSource
Left = 16

View File

@ -11,6 +11,7 @@ uses
cxGraphics, cxDropDownEdit, cxImageComboBox, cxDBEdit, cxContainer, cxEdit,
cxTextEdit, cxMaskEdit, cxCalendar, dxLayoutControl, cxControls, cxMemo,
uViewDireccionEntregaAlbaranCliente, Buttons, ActnList,
uBizContratosCliente, uContratosClienteController,
// uBizPedidosCliente, uPedidosClienteController,
@ -102,6 +103,13 @@ type
dxLayoutControl1Item17: TdxLayoutItem;
frViewObservaciones1: TfrViewObservaciones;
dxLayoutControl1Item6: TdxLayoutItem;
dxLayoutControl1Item25: TdxLayoutItem;
eRefContratoCli: TcxDBTextEdit;
dxLayoutControl1Item26: TdxLayoutItem;
Button2: TButton;
dxLayoutControl1Group16: TdxLayoutGroup;
actVerContratoCli: TAction;
cxDBTextEdit1: TcxDBTextEdit;
procedure CustomViewCreate(Sender: TObject);
procedure CustomViewDestroy(Sender: TObject);
procedure actVerPedidoCliExecute(Sender: TObject);
@ -119,6 +127,8 @@ type
procedure frViewClienteAlbaranButton1Click(Sender: TObject);
procedure frViewClienteAlbaranButton2Click(Sender: TObject);
procedure frViewClienteAlbaranactAnadirContactoUpdate(Sender: TObject);
procedure actVerContratoCliUpdate(Sender: TObject);
procedure actVerContratoCliExecute(Sender: TObject);
protected
FAlbaran : IBizAlbaranCliente;
@ -126,6 +136,8 @@ type
FAlmacenesController : IAlmacenesController;
// FPedidoAsociado : IBizPedidoCliente;
// FPedidoController : IPedidosClienteController;
FContratoAsociado : IBizContratoCliente;
FContratoController : IContratosClienteController;
FViewClienteAlbaran : IViewDatosYSeleccionClienteAlbaran;
FFormasPago : IBizFormaPago;
FFormasPagoController : IFormasPagoController;
@ -152,6 +164,20 @@ uses
uDialogUtils, uFactuGES_App;
procedure TfrViewAlbaranCliente.actVerContratoCliExecute(Sender: TObject);
begin
inherited;
FContratoController.
Ver(FContratoAsociado);
end;
procedure TfrViewAlbaranCliente.actVerContratoCliUpdate(Sender: TObject);
begin
inherited;
if (Sender as TAction).Enabled then
(Sender as TAction).Enabled := (FAlbaran.ID_CONTRATO > 0);
end;
procedure TfrViewAlbaranCliente.actVerPedidoCliExecute(Sender: TObject);
begin
inherited;
@ -161,8 +187,8 @@ end;
procedure TfrViewAlbaranCliente.actVerPedidoCliUpdate(Sender: TObject);
begin
inherited;
if (Sender as TAction).Enabled then
(Sender as TAction).Enabled := (Albaran.REF_PEDIDO <> '')
{ if (Sender as TAction).Enabled then
(Sender as TAction).Enabled := (Albaran.REF_PEDIDO <> '')}
end;
procedure TfrViewAlbaranCliente.bFormasPagoClick(Sender: TObject);
@ -196,6 +222,8 @@ begin
inherited;
FFormasPago := Nil;
FFormasPagoController := TFormasPagoController.Create;
FContratoAsociado := NIL;
FContratoController := TContratosClienteController.Create;
// FPedidoAsociado := NIL;
// FPedidoController := TPedidosClienteController.Create;
FViewClienteAlbaran := frViewClienteAlbaran;
@ -208,6 +236,8 @@ begin
FFormasPago := Nil;
FFormasPagoController := NIL;
FViewClienteAlbaran := Nil;
FContratoAsociado := NIL;
FContratoController := NIL;
// FPedidoController := NIL;
// FPedidoAsociado := NIL;
FAlmacenesController := NIL;
@ -356,6 +386,21 @@ begin
end;
end;
FContratoAsociado := NIL;
if (FAlbaran.ID_CONTRATO > 0) then
begin
FContratoAsociado := FContratoController.Buscar(FAlbaran.ID_CONTRATO);
if Assigned(FContratoAsociado) then
begin
FContratoAsociado.DataTable.Active := True;
eRefContratoCli.Text := FContratoAsociado.REFERENCIA
end
else
eRefContratoCli.Text := '';
end
else
eRefContratoCli.Text := 'No hay contrato asociado';
{
FPedidoAsociado := NIL;
if (FAlbaran.ID_PEDIDO > 0) then
@ -371,7 +416,7 @@ begin
end
else
eReferenciaPedidoCli.Text := 'No hay pedido asociado';
}
}
end
else begin
DADataSource.DataTable := NIL;

View File

@ -1,235 +1,94 @@
inherited frViewAlbaranDevCliente: TfrViewAlbaranDevCliente
inherited dxLayoutControl1: TdxLayoutControl
ExplicitHeight = 650
inherited Label1: TLabel
Left = 352
Width = 299
ExplicitLeft = 352
ExplicitWidth = 299
end
inherited edtFechaAlbaran: TcxDBDateEdit
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 431
Width = 431
end
inherited memObservaciones: TcxDBMemo
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 499
Width = 499
end
inherited eReferencia: TcxDBTextEdit
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 431
Width = 431
end
inherited frViewClienteAlbaran: TfrViewDatosYSeleccionClienteAlbaran
Left = 352
Width = 145
ExplicitLeft = 352
ExplicitWidth = 145
inherited dxLayoutControl1: TdxLayoutControl
Width = 145
ExplicitWidth = 219
ExplicitWidth = 145
inherited edtlNombre: TcxDBTextEdit
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 210
Width = 210
end
inherited edtNIFCIF: TcxDBTextEdit
Left = 231
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 231
ExplicitWidth = 210
Width = 210
end
inherited Button3: TBitBtn
Left = 249
ExplicitLeft = 249
end
inherited edtPersonaContacto: TcxDBTextEdit
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 283
Width = 283
end
inherited edtDireccion: TcxMemo
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 403
Width = 403
end
inherited Button4: TButton
Left = 418
ExplicitLeft = 418
inherited edtTelefonos: TcxTextEdit
ExplicitWidth = 193
Width = 193
end
inherited Button5: TButton
Left = 418
ExplicitLeft = 418
inherited edtReferencia: TcxDBTextEdit
ExplicitWidth = 103
Width = 103
end
end
end
inherited eCalle: TcxDBTextEdit
Left = 446
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 446
ExplicitWidth = 125
Width = 125
end
inherited ePoblacion: TcxDBTextEdit
Left = 446
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 446
ExplicitWidth = 24
Width = 24
end
inherited eCodigoPostal: TcxDBTextEdit
Left = 738
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 738
end
inherited eProvincia: TcxDBTextEdit
Left = 446
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 446
ExplicitWidth = 125
Width = 125
end
inherited ePersonaContacto: TcxDBTextEdit
Left = 446
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 446
ExplicitWidth = 125
Width = 125
end
inherited eTlfTrabajo: TcxDBTextEdit
Left = 446
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 446
ExplicitWidth = 125
Width = 125
end
inherited bElegirDireccion: TBitBtn
Left = 631
ExplicitLeft = 631
end
inherited Button1: TButton
Left = 190
ExplicitLeft = 190
end
inherited eReferenciaPedidoCli: TcxTextEdit
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 245
Width = 245
end
inherited cbFormaPago: TcxDBLookupComboBox
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 293
Width = 293
end
inherited bFormasPago: TButton
Left = 190
ExplicitLeft = 190
end
inherited eFechaRecepcion: TcxDBDateEdit
Left = 486
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 486
ExplicitWidth = 85
Width = 85
end
inherited cbConAlmacen: TCheckBox
Left = 362
ExplicitLeft = 362
end
inherited cbAlmacen: TcxDBLookupComboBox
Left = 547
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 547
ExplicitWidth = 586
Width = 586
end
inherited eRefFacturaCli: TcxDBTextEdit
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 381
Width = 381
end
inherited eFechaPrevista: TcxDBDateEdit
Left = 486
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 486
ExplicitWidth = 85
Width = 85
end
inherited eRefCliente: TcxDBTextEdit
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 431
Width = 431
end
inherited eFechaEnvio: TcxDBDateEdit
Left = 486
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 486
ExplicitWidth = 85
Width = 85
end
@ -240,15 +99,24 @@ inherited frViewAlbaranDevCliente: TfrViewAlbaranDevCliente
Width = 515
ExplicitWidth = 515
inherited cbTienda: TcxComboBox
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 454
Width = 454
end
end
end
inherited frViewObservaciones1: TfrViewObservaciones
Width = 521
Height = 228
ExplicitWidth = 521
ExplicitHeight = 228
inherited memObservaciones: TcxDBMemo
DataBinding.DataSource = DADataSource
ExplicitWidth = 521
ExplicitHeight = 228
Height = 228
Width = 521
end
end
inherited dxLayoutControl1Group_Root: TdxLayoutGroup
inherited dxLayoutControl1Group3: TdxLayoutGroup
inherited dxLayoutControl1Group11: TdxLayoutGroup

View File

@ -9,7 +9,7 @@ uses
cxDBLookupComboBox, cxTextEdit, Buttons, uCustomView, uViewBase,
uViewDatosYSeleccionCliente, cxDBEdit, cxMemo, cxContainer, cxEdit,
cxMaskEdit, cxCalendar, cxControls, uDAInterfaces, uViewTienda,
uViewDatosYSeleccionClienteAlbaran;
uViewDatosYSeleccionClienteAlbaran, uViewObservaciones;
type
TfrViewAlbaranDevCliente = class(TfrViewAlbaranCliente)

View File

@ -115,6 +115,11 @@ inherited frViewAlbaranesCliente: TfrViewAlbaranesCliente
VisibleForCustomization = False
Width = 45
end
object cxGridViewREF_CONTRATO: TcxGridDBColumn
DataBinding.FieldName = 'REF_CONTRATO'
BestFitMaxWidth = 45
Width = 61
end
object cxGridViewREF_FACTURA: TcxGridDBColumn
DataBinding.FieldName = 'REF_FACTURA'
BestFitMaxWidth = 45
@ -171,17 +176,21 @@ inherited frViewAlbaranesCliente: TfrViewAlbaranesCliente
end
object cxGridLevelPendientes: TcxGridLevel
Caption = 'Pendientes'
Visible = False
end
object cxGridLevelEnviados: TcxGridLevel
Caption = 'Enviados'
Visible = False
end
object cxGridLevelServidos: TcxGridLevel
Caption = 'Servidos'
Visible = False
end
object cxGridLevelProximosAEnviar: TcxGridLevel
Caption = 'Pasados de fecha'
Options.DetailFrameColor = clNone
Options.DetailFrameWidth = 0
Visible = False
end
end
inherited frViewFiltroBase1: TfrViewFiltroBase

View File

@ -59,6 +59,7 @@ type
cxGridViewFECHA_PREVISTA_ENVIO: TcxGridDBColumn;
cxStyleRETRASADOS: TcxStyle;
cxGridViewTIENDA: TcxGridDBColumn;
cxGridViewREF_CONTRATO: TcxGridDBColumn;
procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel:
TcxGridLevel);
procedure cxGridViewCODIGOCustomDrawCell(Sender: TcxCustomGridTableView;

View File

@ -54,7 +54,7 @@
<DelphiCompile Include="Articulos_data.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\..\Presupuestos de cliente\Articulos_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Articulos_model.dcp" />
<DCCReference Include="uDataModuleArticulos.pas">
<Form>DataModuleArticulos</Form>
</DCCReference>

View File

@ -55,11 +55,11 @@
<DelphiCompile Include="Articulos_view.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\Articulos_controller.dcp" />
<DCCReference Include="..\Articulos_model.dcp" />
<DCCReference Include="..\Contactos_view.dcp" />
<DCCReference Include="..\Familias_controller.dcp" />
<DCCReference Include="..\GUIBase.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Articulos_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Articulos_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Contactos_view.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Familias_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\GUIBase.dcp" />
<DCCReference Include="uArticulosViewRegister.pas" />
<DCCReference Include="uEditorArticulo.pas">
<Form>fEditorArticulo</Form>

View File

@ -17,6 +17,7 @@
<Projects Include="..\Contactos\Model\Contactos_model.dproj" />
<Projects Include="..\Contactos\Views\Contactos_view.dproj" />
<Projects Include="..\Presupuestos de cliente\Views\PresupuestosCliente_view.dproj" />
<Projects Include="..\Relaciones\Contratos de cliente - Albaranes de cliente\ConCli_AlbCli_relation.dproj" />
<Projects Include="..\Relaciones\Contratos de cliente - Facturas de cliente\ConCli_FacCli_relation.dproj" />
<Projects Include="..\Relaciones\Presupuestos de cliente - Contratos de cliente\PreCli_ConCli_relation.dproj" />
<Projects Include="Controller\ContratosCliente_controller.dproj" />
@ -148,6 +149,15 @@
<Target Name="ContratosCliente_controller:Make">
<MSBuild Projects="Controller\ContratosCliente_controller.dproj" Targets="Make" />
</Target>
<Target Name="ConCli_AlbCli_relation">
<MSBuild Projects="..\Relaciones\Contratos de cliente - Albaranes de cliente\ConCli_AlbCli_relation.dproj" Targets="" />
</Target>
<Target Name="ConCli_AlbCli_relation:Clean">
<MSBuild Projects="..\Relaciones\Contratos de cliente - Albaranes de cliente\ConCli_AlbCli_relation.dproj" Targets="Clean" />
</Target>
<Target Name="ConCli_AlbCli_relation:Make">
<MSBuild Projects="..\Relaciones\Contratos de cliente - Albaranes de cliente\ConCli_AlbCli_relation.dproj" Targets="Make" />
</Target>
<Target Name="ConCli_FacCli_relation">
<MSBuild Projects="..\Relaciones\Contratos de cliente - Facturas de cliente\ConCli_FacCli_relation.dproj" Targets="" />
</Target>
@ -212,13 +222,13 @@
<MSBuild Projects="..\Presupuestos de cliente\Views\PresupuestosCliente_view.dproj" Targets="Make" />
</Target>
<Target Name="Build">
<CallTarget Targets="Base;GUIBase;ApplicationBase;Contactos_model;Contactos_data;Contactos_controller;Contactos_view;Articulos_data;Articulos_controller;Articulos_view;ContratosCliente_model;ContratosCliente_data;ContratosCliente_controller;ConCli_FacCli_relation;ContratosCliente_view;ContratosCliente_plugin;FactuGES;FactuGES_Server;PreCli_ConCli_relation;PresupuestosCliente_view" />
<CallTarget Targets="Base;GUIBase;ApplicationBase;Contactos_model;Contactos_data;Contactos_controller;Contactos_view;Articulos_data;Articulos_controller;Articulos_view;ContratosCliente_model;ContratosCliente_data;ContratosCliente_controller;ConCli_AlbCli_relation;ConCli_FacCli_relation;ContratosCliente_view;ContratosCliente_plugin;FactuGES;FactuGES_Server;PreCli_ConCli_relation;PresupuestosCliente_view" />
</Target>
<Target Name="Clean">
<CallTarget Targets="Base:Clean;GUIBase:Clean;ApplicationBase:Clean;Contactos_model:Clean;Contactos_data:Clean;Contactos_controller:Clean;Contactos_view:Clean;Articulos_data:Clean;Articulos_controller:Clean;Articulos_view:Clean;ContratosCliente_model:Clean;ContratosCliente_data:Clean;ContratosCliente_controller:Clean;ConCli_FacCli_relation:Clean;ContratosCliente_view:Clean;ContratosCliente_plugin:Clean;FactuGES:Clean;FactuGES_Server:Clean;PreCli_ConCli_relation:Clean;PresupuestosCliente_view:Clean" />
<CallTarget Targets="Base:Clean;GUIBase:Clean;ApplicationBase:Clean;Contactos_model:Clean;Contactos_data:Clean;Contactos_controller:Clean;Contactos_view:Clean;Articulos_data:Clean;Articulos_controller:Clean;Articulos_view:Clean;ContratosCliente_model:Clean;ContratosCliente_data:Clean;ContratosCliente_controller:Clean;ConCli_AlbCli_relation:Clean;ConCli_FacCli_relation:Clean;ContratosCliente_view:Clean;ContratosCliente_plugin:Clean;FactuGES:Clean;FactuGES_Server:Clean;PreCli_ConCli_relation:Clean;PresupuestosCliente_view:Clean" />
</Target>
<Target Name="Make">
<CallTarget Targets="Base:Make;GUIBase:Make;ApplicationBase:Make;Contactos_model:Make;Contactos_data:Make;Contactos_controller:Make;Contactos_view:Make;Articulos_data:Make;Articulos_controller:Make;Articulos_view:Make;ContratosCliente_model:Make;ContratosCliente_data:Make;ContratosCliente_controller:Make;ConCli_FacCli_relation:Make;ContratosCliente_view:Make;ContratosCliente_plugin:Make;FactuGES:Make;FactuGES_Server:Make;PreCli_ConCli_relation:Make;PresupuestosCliente_view:Make" />
<CallTarget Targets="Base:Make;GUIBase:Make;ApplicationBase:Make;Contactos_model:Make;Contactos_data:Make;Contactos_controller:Make;Contactos_view:Make;Articulos_data:Make;Articulos_controller:Make;Articulos_view:Make;ContratosCliente_model:Make;ContratosCliente_data:Make;ContratosCliente_controller:Make;ConCli_AlbCli_relation:Make;ConCli_FacCli_relation:Make;ContratosCliente_view:Make;ContratosCliente_plugin:Make;FactuGES:Make;FactuGES_Server:Make;PreCli_ConCli_relation:Make;PresupuestosCliente_view:Make" />
</Target>
<Import Condition="Exists('$(MSBuildBinPath)\Borland.Group.Targets')" Project="$(MSBuildBinPath)\Borland.Group.Targets" />
</Project>

View File

@ -49,14 +49,14 @@
<DelphiCompile Include="ContratosCliente_controller.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\Articulos_controller.dcp" />
<DCCReference Include="..\Contactos_controller.dcp" />
<DCCReference Include="..\ContratosCliente_data.dcp" />
<DCCReference Include="..\ContratosCliente_model.dcp" />
<DCCReference Include="..\GestorDocumentos_controller.dcp" />
<DCCReference Include="..\GUIBase.dcp" />
<DCCReference Include="..\PresupuestosCliente_controller.dcp" />
<DCCReference Include="..\PresupuestosCliente_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Articulos_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Contactos_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_data.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\GestorDocumentos_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\GUIBase.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\PresupuestosCliente_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\PresupuestosCliente_model.dcp" />
<DCCReference Include="uArticulosContratoClienteController.pas" />
<DCCReference Include="uContratosClienteController.pas" />
<DCCReference Include="uContratosClienteReportController.pas" />

View File

@ -33,7 +33,8 @@ type
function Buscar(const ListaID: TIntegerList): IBizContratoCliente; overload;
function BuscarTodos: IBizContratoCliente; overload;
function BuscarTodos(const ID_Cliente: Integer): IBizContratoCliente; overload;
procedure Ver(AContrato : IBizContratoCliente);
procedure Ver(AContrato : IBizContratoCliente); overload;
procedure Ver(const ID: Integer); overload;
procedure VerTodos(AContratos: IBizContratoCliente;
const AVerModal : Boolean = False; const AWindowCaption: String = '';
const AHeaderText: String = '');
@ -113,7 +114,8 @@ type
function BuscarTodos: IBizContratoCliente; overload;
function BuscarTodos(const ID_Cliente: Integer): IBizContratoCliente; overload;
function Nuevo : IBizContratoCliente;
procedure Ver(AContrato : IBizContratoCliente);
procedure Ver(AContrato : IBizContratoCliente); overload;
procedure Ver(const ID: Integer); overload;
procedure VerTodos(AContratos: IBizContratoCliente;
const AVerModal : Boolean = False; const AWindowCaption: String = '';
const AHeaderText: String = '');
@ -460,6 +462,19 @@ begin
end;
end;
procedure TContratosClienteController.Ver(const ID: Integer);
var
AContrato : IBizContratoCliente;
begin
AContrato := Self.Buscar(ID);
if Assigned(AContrato) then
try
Self.Ver(AContrato);
finally
FreeAndNil(AContrato);
end;
end;
procedure TContratosClienteController.VerListadoBeneficios;
var
AContratosClienteBeneficios: IBizContratosClienteBeneficios;

View File

@ -49,18 +49,18 @@
<DelphiCompile Include="ContratosCliente_data.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\..\Facturas de cliente\adortl.dcp" />
<DCCReference Include="..\..\Facturas de cliente\ContratosCliente_model.dcp" />
<DCCReference Include="..\..\Facturas de cliente\cxLibraryD11.dcp" />
<DCCReference Include="..\..\Facturas de cliente\DataAbstract_Core_D11.dcp" />
<DCCReference Include="..\..\Facturas de cliente\dbrtl.dcp" />
<DCCReference Include="..\..\Facturas de cliente\dsnap.dcp" />
<DCCReference Include="..\..\Facturas de cliente\dxGDIPlusD11.dcp" />
<DCCReference Include="..\..\Facturas de cliente\dxThemeD11.dcp" />
<DCCReference Include="..\..\Facturas de cliente\RemObjects_Core_D11.dcp" />
<DCCReference Include="..\..\Facturas de cliente\rtl.dcp" />
<DCCReference Include="..\..\Facturas de cliente\vcl.dcp" />
<DCCReference Include="..\..\Facturas de cliente\vcldb.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\adortl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxLibraryD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\DataAbstract_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dbrtl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dsnap.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxGDIPlusD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxThemeD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\RemObjects_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\rtl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcldb.dcp" />
<DCCReference Include="uDataModuleContratosCliente.pas" />
</ItemGroup>
</Project>

View File

@ -52,23 +52,23 @@
<DelphiCompile Include="ContratosCliente_model.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="adortl.dcp" />
<DCCReference Include="Base.dcp" />
<DCCReference Include="Contactos_controller.dcp" />
<DCCReference Include="Contactos_model.dcp" />
<DCCReference Include="DataAbstract_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\adortl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Base.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Contactos_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Contactos_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\DataAbstract_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dbrtl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dsnap.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\RemObjects_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\rtl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcldb.dcp" />
<DCCReference Include="Data\uIDataModuleContratosCliente.pas" />
<DCCReference Include="Data\uIDataModuleContratosClienteReport.pas" />
<DCCReference Include="dbrtl.dcp" />
<DCCReference Include="dsnap.dcp" />
<DCCReference Include="RemObjects_Core_D11.dcp" />
<DCCReference Include="rtl.dcp" />
<DCCReference Include="schContratosClienteClient_Intf.pas" />
<DCCReference Include="schContratosClienteServer_Intf.pas" />
<DCCReference Include="uBizContratosCliente.pas" />
<DCCReference Include="uBizDetallesContratoCliente.pas" />
<DCCReference Include="vcl.dcp" />
<DCCReference Include="vcldb.dcp" />
</ItemGroup>
</Project>
<!-- EurekaLog First Line

View File

@ -42,8 +42,6 @@
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Package_Options><Package_Options Name="ImplicitBuild">False</Package_Options><Package_Options Name="DesigntimeOnly">False</Package_Options><Package_Options Name="RuntimeOnly">False</Package_Options></Package_Options><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">3082</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<Excluded_Packages Name="$(BDS)\bin\dcloffice2k100.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDS)\bin\dclofficexp100.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages><Source><Source Name="MainSource">ContratosCliente_plugin.dpk</Source></Source></Delphi.Personality></BorlandProject></BorlandProject>
@ -53,13 +51,13 @@
<DelphiCompile Include="ContratosCliente_plugin.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\..\Lib\ApplicationBase.dcp" />
<DCCReference Include="..\..\Lib\Articulos_view.dcp" />
<DCCReference Include="..\..\Lib\Base.dcp" />
<DCCReference Include="..\..\Lib\Contactos_view.dcp" />
<DCCReference Include="..\..\Lib\ContratosCliente_controller.dcp" />
<DCCReference Include="..\..\Lib\ContratosCliente_view.dcp" />
<DCCReference Include="..\..\Lib\GUIBase.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ApplicationBase.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Articulos_view.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Base.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Contactos_view.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_view.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\GUIBase.dcp" />
<DCCReference Include="uPluginContratosCliente.pas">
<Form>PluginContratosCliente</Form>
</DCCReference>

View File

@ -47,6 +47,7 @@ requires
dxComnD11,
ContratosCliente_model,
ContratosCliente_controller,
ConCli_AlbCli_relation,
ConCli_FacCli_relation,
PngComponentsD10,
PNG_D10,

View File

@ -49,56 +49,57 @@
<DelphiCompile Include="ContratosCliente_view.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="C:\Documents and Settings\Usuario\adortl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Articulos_view.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Base.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ConCli_FacCli_relation.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxDataD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxEditorsD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxExportD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxExtEditorsD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxGridD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxLibraryD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxPageControlD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\DataAbstract_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dbrtl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dclcxLibraryD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dcldxCoreD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\designide.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dsnap.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxComnD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxCoreD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxGDIPlusD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxLayoutControlD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxPSCoreD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxPScxCommonD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxPScxGrid6LnkD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxPSLnksD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\dxThemeD11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\GestorInformes_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\GUIBase.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\GUISDK_D11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Jcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JclVcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvCoreD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvPageCompsD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvStdCtrlsD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\JvSystemD11R.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\PngComponentsD10.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\PNG_D10.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\RemObjects_Core_D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\rtl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\tb2k_d10.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\tbx_d10.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcl.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vclactnband.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcldb.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vcljpg.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vclshlctrls.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\vclx.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\xmlrtl.dcp" />
<DCCReference Include="..\..\Lib\adortl.dcp" />
<DCCReference Include="..\..\Lib\Articulos_view.dcp" />
<DCCReference Include="..\..\Lib\Base.dcp" />
<DCCReference Include="..\..\Lib\ConCli_AlbCli_relation.dcp" />
<DCCReference Include="..\..\Lib\ConCli_FacCli_relation.dcp" />
<DCCReference Include="..\..\Lib\ContratosCliente_controller.dcp" />
<DCCReference Include="..\..\Lib\ContratosCliente_model.dcp" />
<DCCReference Include="..\..\Lib\cxDataD11.dcp" />
<DCCReference Include="..\..\Lib\cxEditorsD11.dcp" />
<DCCReference Include="..\..\Lib\cxExportD11.dcp" />
<DCCReference Include="..\..\Lib\cxExtEditorsD11.dcp" />
<DCCReference Include="..\..\Lib\cxGridD11.dcp" />
<DCCReference Include="..\..\Lib\cxLibraryD11.dcp" />
<DCCReference Include="..\..\Lib\cxPageControlD11.dcp" />
<DCCReference Include="..\..\Lib\DataAbstract_Core_D11.dcp" />
<DCCReference Include="..\..\Lib\dbrtl.dcp" />
<DCCReference Include="..\..\Lib\dclcxLibraryD11.dcp" />
<DCCReference Include="..\..\Lib\dcldxCoreD11.dcp" />
<DCCReference Include="..\..\Lib\designide.dcp" />
<DCCReference Include="..\..\Lib\dsnap.dcp" />
<DCCReference Include="..\..\Lib\dxComnD11.dcp" />
<DCCReference Include="..\..\Lib\dxCoreD11.dcp" />
<DCCReference Include="..\..\Lib\dxGDIPlusD11.dcp" />
<DCCReference Include="..\..\Lib\dxLayoutControlD11.dcp" />
<DCCReference Include="..\..\Lib\dxPSCoreD11.dcp" />
<DCCReference Include="..\..\Lib\dxPScxCommonD11.dcp" />
<DCCReference Include="..\..\Lib\dxPScxGrid6LnkD11.dcp" />
<DCCReference Include="..\..\Lib\dxPSLnksD11.dcp" />
<DCCReference Include="..\..\Lib\dxThemeD11.dcp" />
<DCCReference Include="..\..\Lib\GestorInformes_controller.dcp" />
<DCCReference Include="..\..\Lib\GUIBase.dcp" />
<DCCReference Include="..\..\Lib\GUISDK_D11R.dcp" />
<DCCReference Include="..\..\Lib\Jcl.dcp" />
<DCCReference Include="..\..\Lib\JclVcl.dcp" />
<DCCReference Include="..\..\Lib\JvCoreD11R.dcp" />
<DCCReference Include="..\..\Lib\JvPageCompsD11R.dcp" />
<DCCReference Include="..\..\Lib\JvStdCtrlsD11R.dcp" />
<DCCReference Include="..\..\Lib\JvSystemD11R.dcp" />
<DCCReference Include="..\..\Lib\PngComponentsD10.dcp" />
<DCCReference Include="..\..\Lib\PNG_D10.dcp" />
<DCCReference Include="..\..\Lib\RemObjects_Core_D11.dcp" />
<DCCReference Include="..\..\Lib\rtl.dcp" />
<DCCReference Include="..\..\Lib\tb2k_d10.dcp" />
<DCCReference Include="..\..\Lib\tbx_d10.dcp" />
<DCCReference Include="..\..\Lib\vcl.dcp" />
<DCCReference Include="..\..\Lib\vclactnband.dcp" />
<DCCReference Include="..\..\Lib\vcldb.dcp" />
<DCCReference Include="..\..\Lib\vcljpg.dcp" />
<DCCReference Include="..\..\Lib\vclshlctrls.dcp" />
<DCCReference Include="..\..\Lib\vclx.dcp" />
<DCCReference Include="..\..\Lib\xmlrtl.dcp" />
<DCCReference Include="uContratosClienteViewRegister.pas" />
<DCCReference Include="uEditorContratoCliente.pas">
<Form>fEditorPresupuestoCliente</Form>

View File

@ -1,15 +1,17 @@
inherited fEditorContratosCliente: TfEditorContratosCliente
Caption = 'Lista de contratos de cliente'
ClientWidth = 805
ExplicitWidth = 813
ClientHeight = 551
ClientWidth = 1119
ExplicitWidth = 1127
ExplicitHeight = 585
PixelsPerInch = 96
TextHeight = 13
inherited JvNavPanelHeader: TJvNavPanelHeader
Width = 805
Width = 1119
Caption = 'Lista de contratos de cliente'
ExplicitWidth = 805
ExplicitWidth = 1119
inherited Image1: TImage
Left = 778
Left = 1092
Picture.Data = {
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001800
0000180806000000E0773DF80000000970485973000017120000171201679FD2
@ -121,8 +123,8 @@ inherited fEditorContratosCliente: TfEditorContratosCliente
end
end
inherited TBXDock: TTBXDock
Width = 805
ExplicitWidth = 805
Width = 1119
ExplicitWidth = 1119
inherited tbxMain: TTBXToolbar
ExplicitWidth = 775
object TBXSubmenuItem3: TTBXSubmenuItem [0]
@ -175,7 +177,7 @@ inherited fEditorContratosCliente: TfEditorContratosCliente
end
end
inherited tbxMenu: TTBXToolbar
ExplicitWidth = 805
ExplicitWidth = 1119
object TBXSubmenuItem2: TTBXSubmenuItem [4]
Caption = 'A&cciones'
object TBXItem39: TTBXItem
@ -200,9 +202,13 @@ inherited fEditorContratosCliente: TfEditorContratosCliente
DockPos = 343
Visible = True
ExplicitLeft = 431
ExplicitWidth = 221
ExplicitWidth = 375
object TBXSeparatorItem18: TTBXSeparatorItem
end
object TBXItem43: TTBXItem
Action = actGenerarAlbaranCli
DisplayMode = nbdmImageAndText
end
object TBXItem40: TTBXItem
Action = actGenerarFactura
DisplayMode = nbdmImageAndText
@ -217,8 +223,10 @@ inherited fEditorContratosCliente: TfEditorContratosCliente
end
end
inherited StatusBar: TJvStatusBar
Width = 805
ExplicitWidth = 805
Top = 532
Width = 1119
ExplicitTop = 532
ExplicitWidth = 1119
end
inherited EditorActionList: TActionList
inherited actNuevo: TAction
@ -233,8 +241,9 @@ inherited fEditorContratosCliente: TfEditorContratosCliente
object actGenerarAlbaranCli: TAction
Category = 'Acciones'
Caption = 'Generar albar'#225'n de cliente'
ImageIndex = 23
ImageIndex = 26
OnExecute = actGenerarAlbaranCliExecute
OnUpdate = actGenerarAlbaranCliUpdate
end
object actGenerarFactura: TAction
Category = 'Acciones'
@ -2003,13 +2012,16 @@ inherited fEditorContratosCliente: TfEditorContratosCliente
ImageIndex = 26
Visible = False
end
object Generar2: TMenuItem [7]
object Generaralbarndecliente1: TMenuItem [7]
Action = actGenerarAlbaranCli
end
object Generar2: TMenuItem [8]
Action = actGenerarFactura
end
object N4: TMenuItem [8]
object N4: TMenuItem [9]
Caption = '-'
end
object Enviarporemail1: TMenuItem [9]
object Enviarporemail1: TMenuItem [10]
Action = actEnviarEMail
end
end

View File

@ -44,6 +44,8 @@ type
TBXItem42: TTBXItem;
TBXSubmenuItem3: TTBXSubmenuItem;
bObra: TTBXItem;
TBXItem43: TTBXItem;
Generaralbarndecliente1: TMenuItem;
procedure FormShow(Sender: TObject);
procedure actGenerarAlbaranCliExecute(Sender: TObject);
procedure actEliminarUpdate(Sender: TObject);
@ -66,6 +68,7 @@ type
procedure bElectrodomesticoClick(Sender: TObject);
procedure bVariosClick(Sender: TObject);
procedure bObraClick(Sender: TObject);
procedure actGenerarAlbaranCliUpdate(Sender: TObject);
protected
FContratos: IBizContratoCliente;
@ -103,15 +106,7 @@ uses
uDataModuleContratosCliente, uDataModuleUsuarios, uFactuGES_App,
uEditorBase, uEditorDBBase, uDialogUtils, Dialogs,
uDBSelectionListUtils, uGridUtils, uGenerarFacturasCliUtils,
// uGridStatusUtils,
// uEditorFechaDecision,
// uBizAlbaranesCliente, uAlbaranesClienteController,
// uFacturasClienteController, uBizFacturasCliente,
// uGenerarAlbaranesCliUtils,
uGestorInformesController;
uGenerarAlbaranesCliUtils, uGestorInformesController;
{$R *.dfm}
@ -246,7 +241,16 @@ end;
procedure TfEditorContratosCliente.actGenerarAlbaranCliExecute(Sender: TObject);
begin
inherited;
// GenerarAlbaranCli(FContratos.ID);
GenerarAlbaranCli(Contratos.ID);
actRefrescar.Execute;
end;
procedure TfEditorContratosCliente.actGenerarAlbaranCliUpdate(Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := HayDatos
and not (ViewGrid.NumSeleccionados > 1)
and ViewGrid.esSeleccionCeldaDatos;
end;
procedure TfEditorContratosCliente.actGenerarExecute(Sender: TObject);

View File

@ -1,8 +1,7 @@
inherited fEditorElegirContratosCliente: TfEditorElegirContratosCliente
Caption = 'Seleccionar pedido de cliente'
Caption = 'Seleccionar contrato de cliente'
ClientWidth = 656
ExplicitWidth = 664
ExplicitHeight = 478
PixelsPerInch = 96
TextHeight = 13
object JvgWizardHeader1: TJvgWizardHeader [0]
@ -26,7 +25,7 @@ inherited fEditorElegirContratosCliente: TfEditorElegirContratosCliente
SymbolFont.Name = 'Wingdings'
SymbolFont.Style = [fsBold]
Captions.Strings = (
'Seleccione el pedido de cliente')
'Seleccione el contrato de cliente')
Comments.Strings = (
' ')
Gradient.FromColor = clHighlight
@ -55,9 +54,6 @@ inherited fEditorElegirContratosCliente: TfEditorElegirContratosCliente
Left = 431
ExplicitLeft = 431
ExplicitWidth = 225
inherited TBXItem2: TTBXItem
Visible = False
end
inherited TBXItem5: TTBXItem
Visible = False
end
@ -90,17 +86,18 @@ inherited fEditorElegirContratosCliente: TfEditorElegirContratosCliente
Left = 343
Visible = False
ExplicitLeft = 343
ExplicitWidth = 221
end
end
inherited StatusBar: TJvStatusBar
Top = 389
Top = 496
Width = 656
ExplicitTop = 389
ExplicitTop = 496
ExplicitWidth = 656
end
inline frViewBarraSeleccion1: TfrViewBarraSeleccion [4]
Left = 0
Top = 408
Top = 515
Width = 656
Height = 36
Align = alBottom
@ -112,7 +109,7 @@ inherited fEditorElegirContratosCliente: TfEditorElegirContratosCliente
ParentFont = False
TabOrder = 3
ReadOnly = False
ExplicitTop = 408
ExplicitTop = 515
ExplicitWidth = 656
ExplicitHeight = 36
inherited JvFooter1: TJvFooter

View File

@ -188,24 +188,16 @@ inherited fEditorFacturasCliente: TfEditorFacturasCliente
Width = 640
ExplicitWidth = 640
inherited txtFiltroTodo: TcxTextEdit
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 543
Width = 543
end
inherited edtFechaIniFiltro: TcxDateEdit
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 144
Width = 144
end
inherited edtFechaFinFiltro: TcxDateEdit
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
Left = 301
ExplicitLeft = 301
ExplicitWidth = 263
Width = 263
end

View File

@ -0,0 +1,40 @@
package ConCli_AlbCli_relation;
{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$IMPLICITBUILD OFF}
requires
Base,
Contactos_model,
Contactos_controller,
ContratosCliente_controller,
ContratosCliente_model,
AlbaranesCliente_controller,
AlbaranesCliente_model,
PresupuestosCliente_model;
contains
uGenerarAlbaranesCliUtils in 'uGenerarAlbaranesCliUtils.pas' {dmGenerarAlbaranesCli};
end.

View File

@ -0,0 +1,653 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{69494a8c-0a35-41ea-b8ec-ea790bfc0662}</ProjectGuid>
<MainSource>ConCli_AlbCli_relation.dpk</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>..\..\..\..\Output\Debug\Cliente\ConCli_AlbCli_relation.bpl</DCC_DependencyCheckOutputName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Version>7.0</Version>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DcuOutput>.\</DCC_DcuOutput>
<DCC_ObjOutput>.\</DCC_ObjOutput>
<DCC_HppOutput>.\</DCC_HppOutput>
<DCC_BplOutput>..\..\..\..\Output\Debug\Cliente</DCC_BplOutput>
<DCC_DcpOutput>..\..\Lib</DCC_DcpOutput>
<DCC_UnitSearchPath>..\..\..\Lib;..\..\Lib</DCC_UnitSearchPath>
<DCC_ResourcePath>..\..\..\Lib;..\..\Lib</DCC_ResourcePath>
<DCC_ObjPath>..\..\..\Lib;..\..\Lib</DCC_ObjPath>
<DCC_IncludePath>..\..\..\Lib;..\..\Lib</DCC_IncludePath>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_DcuOutput>.\</DCC_DcuOutput>
<DCC_ObjOutput>.\</DCC_ObjOutput>
<DCC_HppOutput>.\</DCC_HppOutput>
<DCC_BplOutput>..\..\..\..\Output\Debug\Cliente</DCC_BplOutput>
<DCC_DcpOutput>..\..\Lib</DCC_DcpOutput>
<DCC_UnitSearchPath>..\..\..\Lib;..\..\Lib</DCC_UnitSearchPath>
<DCC_ResourcePath>..\..\..\Lib;..\..\Lib</DCC_ResourcePath>
<DCC_ObjPath>..\..\..\Lib;..\..\Lib</DCC_ObjPath>
<DCC_IncludePath>..\..\..\Lib;..\..\Lib</DCC_IncludePath>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Package_Options><Package_Options Name="ImplicitBuild">False</Package_Options><Package_Options Name="DesigntimeOnly">False</Package_Options><Package_Options Name="RuntimeOnly">False</Package_Options></Package_Options><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">3082</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dclsmp100.bpl">Borland Sample Components</Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dcl31w100.bpl">Delphi 1.0 Compatibility Components</Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dclmid100.bpl">Borland MyBase DataAccess Components</Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dcltee100.bpl">TeeChart Components</Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dcldbxcds100.bpl">Borland SimpleDataset Component (DBX)</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\dcldxBarExtItemsD10.bpl">ExpressBars extended items by Developer Express Inc.</Excluded_Packages>
<Excluded_Packages Name="T:\BPL_D10\dcldxBarD10.bpl">ExpressBars by Developer Express Inc.</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\dclcxSchedulerD10.bpl">ExpressScheduler 2 by Developer Express Inc.</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\dclcxVerticalGridD10.bpl">ExpressVerticalGrid by Developer Express Inc.</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\dcldxBarDBNavD10.bpl">ExpressBars DBNavigator by Developer Express Inc.</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\dcldxBarExtDBItemsD10.bpl">ExpressBars extended DB items by Developer Express Inc.</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\dcldxsbD10.bpl">ExpressSideBar by Developer Express Inc.</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvBandsD10D.bpl">JVCL Band Objects</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvCmpD10D.bpl">JVCL Non-Visual Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvCryptD10D.bpl">JVCL Encryption and Compression Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvDlgsD10D.bpl">JVCL Dialog Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvDockingD10D.bpl">JVCL Docking Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvDotNetCtrlsD10D.bpl">JVCL DotNet Controls</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvEDID10D.bpl">JVCL EDI Components Designtime Package</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvHMID10D.bpl">JVCL HMI Controls design time unit</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvInterpreterD10D.bpl">JVCL Interpreter Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvJansD10D.bpl">JVCL Jans Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvManagedThreadsD10D.bpl">JVCL Managed Threads</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvMMD10D.bpl">JVCL Multimedia and Image Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvNetD10D.bpl">JVCL Network Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvPageCompsD10D.bpl">JVCL Page Style Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvPluginD10D.bpl">JVCL Plugin Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvPrintPreviewD10D.bpl">JVCL Print Preview Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvRuntimeDesignD10D.bpl">JVCL Runtime Design Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvTimeFrameworkD10D.bpl">JVCL Time Framework</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvUIBD10D.bpl">JVCL Unified Interbase Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\JvValidatorsD10D.bpl">JVCL Validators and Error Provider Components</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\SMImportD2006.bpl">SMImport suite: data importing into dataset. Scalabium/Mike Shkolnik, 2000-2005</Excluded_Packages>
<Excluded_Packages Name="T:\Bpl_D10\SMExportD2006.bpl">SMExport suite: data export from dataset. Written by Mike Shkolnik/Scalabium, 1998-2004.</Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dclIntraweb_80_100.bpl">Intraweb 8.0 Design Package for Borland Development Studio 2006</Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dclie100.bpl">Internet Explorer Components</Excluded_Packages>
</Excluded_Packages><Source><Source Name="MainSource">ConCli_AlbCli_relation.dpk</Source></Source></Delphi.Personality></BorlandProject></BorlandProject>
</ProjectExtensions>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
<ItemGroup>
<DelphiCompile Include="ConCli_AlbCli_relation.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="C:\Documents and Settings\Usuario\AlbaranesCliente_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\AlbaranesCliente_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Base.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Contactos_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Contactos_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\PresupuestosCliente_model.dcp" />
<DCCReference Include="uGenerarAlbaranesCliUtils.pas">
<Form>dmGenerarAlbaranesCli</Form>
</DCCReference>
</ItemGroup>
</Project>
<!-- EurekaLog First Line
[Exception Log]
EurekaLog Version=6006
Activate=0
Activate Handle=1
Save Log File=1
Foreground Tab=0
Freeze Activate=0
Freeze Timeout=60
SMTP From=eurekalog@email.com
SMTP Host=
SMTP Port=25
SMTP UserID=
SMTP Password=
Append to Log=0
TerminateBtn Operation=2
Errors Number=32
Errors Terminate=3
Email Address=
Email Object=
Email Send Options=0
Output Path=
Encrypt Password=
AutoCloseDialogSecs=0
WebSendMode=0
SupportULR=
HTMLLayout Count=15
HTMLLine0="%3Chtml%3E"
HTMLLine1=" %3Chead%3E"
HTMLLine2=" %3C/head%3E"
HTMLLine3=" %3Cbody TopMargin=10 LeftMargin=10%3E"
HTMLLine4=" %3Ctable width="100%%" border="0"%3E"
HTMLLine5=" %3Ctr%3E"
HTMLLine6=" %3Ctd nowrap%3E"
HTMLLine7=" %3Cfont face="Lucida Console, Courier" size="2"%3E"
HTMLLine8=" %3C%%HTML_TAG%%%3E"
HTMLLine9=" %3C/font%3E"
HTMLLine10=" %3C/td%3E"
HTMLLine11=" %3C/tr%3E"
HTMLLine12=" %3C/table%3E"
HTMLLine13=" %3C/body%3E"
HTMLLine14="%3C/html%3E"
AutoCrashOperation=2
AutoCrashNumber=10
AutoCrashMinutes=1
WebURL=
WebUserID=
WebPassword=
WebPort=0
AttachedFiles=
ProxyURL=
ProxyUser=
ProxyPassword=
ProxyPort=8080
TrakerUser=
TrakerPassword=
TrakerAssignTo=
TrakerProject=
TrakerCategory=
TrakerTrialID=
ZipPassword=
PreBuildEvent=
PostSuccessfulBuildEvent=
PostFailureBuildEvent=
ExceptionDialogType=2
Count=0
EMail Message Line Count=0
loNoDuplicateErrors=0
loAppendReproduceText=0
loDeleteLogAtVersionChange=0
loAddComputerNameInLogFileName=0
loSaveModulesAndProcessesSections=1
loSaveAssemblerAndCPUSections=1
soAppStartDate=1
soAppName=1
soAppVersionNumber=1
soAppParameters=1
soAppCompilationDate=1
soAppUpTime=1
soExcDate=1
soExcAddress=1
soExcModuleName=1
soExcModuleVersion=1
soExcType=1
soExcMessage=1
soExcID=1
soExcCount=1
soExcStatus=1
soExcNote=1
soUserID=1
soUserName=1
soUserEmail=1
soUserPrivileges=1
soUserCompany=1
soActCtlsFormClass=1
soActCtlsFormText=1
soActCtlsControlClass=1
soActCtlsControlText=1
soCmpName=1
soCmpTotalMemory=1
soCmpFreeMemory=1
soCmpTotalDisk=1
soCmpFreeDisk=1
soCmpSysUpTime=1
soCmpProcessor=1
soCmpDisplayMode=1
soCmpDisplayDPI=1
soCmpVideoCard=1
soCmpPrinter=1
soOSType=1
soOSBuildN=1
soOSUpdate=1
soOSLanguage=1
soOSCharset=1
soNetIP=1
soNetSubmask=1
soNetGateway=1
soNetDNS1=1
soNetDNS2=1
soNetDHCP=1
soCustomData=1
sndShowSendDialog=1
sndShowSuccessFailureMsg=0
sndSendEntireLog=0
sndSendXMLLogCopy=0
sndSendScreenshot=1
sndUseOnlyActiveWindow=0
sndSendLastHTMLPage=1
sndSendInSeparatedThread=0
sndAddDateInFileName=0
sndAddComputerNameInFileName=0
edoSendErrorReportChecked=1
edoAttachScreenshotChecked=1
edoShowCopyToClipOption=1
edoShowDetailsButton=1
edoShowInDetailedMode=0
edoShowInTopMostMode=0
edoUseEurekaLogLookAndFeel=0
edoShowSendErrorReportOption=1
edoShowAttachScreenshotOption=1
edoShowCustomButton=0
csoShowDLLs=1
csoShowBPLs=1
csoShowBorlandThreads=1
csoShowWindowsThreads=1
csoDoNotStoreProcNames=0
boPauseBorlandThreads=0
boDoNotPauseMainThread=0
boPauseWindowsThreads=0
boUseMainModuleOptions=1
boCopyLogInCaseOfError=1
boSaveCompressedCopyInCaseOfError=0
boHandleSafeCallExceptions=1
boCallRTLExceptionEvent=0
boCatchHandledExceptions=0
loCatchLeaks=0
loGroupsSonLeaks=1
loHideBorlandLeaks=1
loFreeAllLeaks=1
loCatchLeaksExceptions=1
cfoReduceFileSize=1
cfoCheckFileCorruption=0
Count mtInformationMsgCaption=1
mtInformationMsgCaption0="Information."
Count mtQuestionMsgCaption=1
mtQuestionMsgCaption0="Question."
Count mtErrorMsgCaption=1
mtErrorMsgCaption0="Error."
Count mtDialog_Caption=1
mtDialog_Caption0="Error occurred"
Count mtDialog_ErrorMsgCaption=2
mtDialog_ErrorMsgCaption0="An error has occurred during program execution."
mtDialog_ErrorMsgCaption1="Please read the following information for further details."
Count mtDialog_GeneralCaption=1
mtDialog_GeneralCaption0="General"
Count mtDialog_GeneralHeader=1
mtDialog_GeneralHeader0="General Information"
Count mtDialog_CallStackCaption=1
mtDialog_CallStackCaption0="Call Stack"
Count mtDialog_CallStackHeader=1
mtDialog_CallStackHeader0="Call Stack Information"
Count mtDialog_ModulesCaption=1
mtDialog_ModulesCaption0="Modules"
Count mtDialog_ModulesHeader=1
mtDialog_ModulesHeader0="Modules Information"
Count mtDialog_ProcessesCaption=1
mtDialog_ProcessesCaption0="Processes"
Count mtDialog_ProcessesHeader=1
mtDialog_ProcessesHeader0="Processes Information"
Count mtDialog_AsmCaption=1
mtDialog_AsmCaption0="Assembler"
Count mtDialog_AsmHeader=1
mtDialog_AsmHeader0="Assembler Information"
Count mtDialog_CPUCaption=1
mtDialog_CPUCaption0="CPU"
Count mtDialog_CPUHeader=1
mtDialog_CPUHeader0="CPU Information"
Count mtDialog_OKButtonCaption=1
mtDialog_OKButtonCaption0="%26OK"
Count mtDialog_TerminateButtonCaption=1
mtDialog_TerminateButtonCaption0="%26Terminate"
Count mtDialog_RestartButtonCaption=1
mtDialog_RestartButtonCaption0="%26Restart"
Count mtDialog_DetailsButtonCaption=1
mtDialog_DetailsButtonCaption0="%26Details"
Count mtDialog_CustomButtonCaption=1
mtDialog_CustomButtonCaption0="%26Help"
Count mtDialog_SendMessage=1
mtDialog_SendMessage0="%26Send this error via Internet"
Count mtDialog_ScreenshotMessage=1
mtDialog_ScreenshotMessage0="%26Attach a Screenshot image"
Count mtDialog_CopyMessage=1
mtDialog_CopyMessage0="%26Copy to Clipboard"
Count mtDialog_SupportMessage=1
mtDialog_SupportMessage0="Go to the Support Page"
Count mtMSDialog_ErrorMsgCaption=1
mtMSDialog_ErrorMsgCaption0="The application has encountered a problem. We are sorry for the inconvenience."
Count mtMSDialog_RestartCaption=1
mtMSDialog_RestartCaption0="Restart application."
Count mtMSDialog_TerminateCaption=1
mtMSDialog_TerminateCaption0="Terminate application."
Count mtMSDialog_PleaseCaption=1
mtMSDialog_PleaseCaption0="Please tell us about this problem."
Count mtMSDialog_DescriptionCaption=1
mtMSDialog_DescriptionCaption0="We have created an error report that you can send to us. We will treat this report as confidential and anonymous."
Count mtMSDialog_SeeDetailsCaption=1
mtMSDialog_SeeDetailsCaption0="To see what data the error report contains,"
Count mtMSDialog_SeeClickCaption=1
mtMSDialog_SeeClickCaption0="click here."
Count mtMSDialog_HowToReproduceCaption=1
mtMSDialog_HowToReproduceCaption0="What were you doing when the problem happended (optional)?"
Count mtMSDialog_EmailCaption=1
mtMSDialog_EmailCaption0="Email address (optional):"
Count mtMSDialog_SendButtonCaption=1
mtMSDialog_SendButtonCaption0="%26Send Error Report"
Count mtMSDialog_NoSendButtonCaption=1
mtMSDialog_NoSendButtonCaption0="%26Don't Send"
Count mtLog_AppHeader=1
mtLog_AppHeader0="Application"
Count mtLog_AppStartDate=1
mtLog_AppStartDate0="Start Date"
Count mtLog_AppName=1
mtLog_AppName0="Name/Description"
Count mtLog_AppVersionNumber=1
mtLog_AppVersionNumber0="Version Number"
Count mtLog_AppParameters=1
mtLog_AppParameters0="Parameters"
Count mtLog_AppCompilationDate=1
mtLog_AppCompilationDate0="Compilation Date"
Count mtLog_AppUpTime=1
mtLog_AppUpTime0="Up Time"
Count mtLog_ExcHeader=1
mtLog_ExcHeader0="Exception"
Count mtLog_ExcDate=1
mtLog_ExcDate0="Date"
Count mtLog_ExcAddress=1
mtLog_ExcAddress0="Address"
Count mtLog_ExcModuleName=1
mtLog_ExcModuleName0="Module Name"
Count mtLog_ExcModuleVersion=1
mtLog_ExcModuleVersion0="Module Version"
Count mtLog_ExcType=1
mtLog_ExcType0="Type"
Count mtLog_ExcMessage=1
mtLog_ExcMessage0="Message"
Count mtLog_ExcID=1
mtLog_ExcID0="ID"
Count mtLog_ExcCount=1
mtLog_ExcCount0="Count"
Count mtLog_ExcStatus=1
mtLog_ExcStatus0="Status"
Count mtLog_ExcNote=1
mtLog_ExcNote0="Note"
Count mtLog_UserHeader=1
mtLog_UserHeader0="User"
Count mtLog_UserID=1
mtLog_UserID0="ID"
Count mtLog_UserName=1
mtLog_UserName0="Name"
Count mtLog_UserEmail=1
mtLog_UserEmail0="Email"
Count mtLog_UserCompany=1
mtLog_UserCompany0="Company"
Count mtLog_UserPrivileges=1
mtLog_UserPrivileges0="Privileges"
Count mtLog_ActCtrlsHeader=1
mtLog_ActCtrlsHeader0="Active Controls"
Count mtLog_ActCtrlsFormClass=1
mtLog_ActCtrlsFormClass0="Form Class"
Count mtLog_ActCtrlsFormText=1
mtLog_ActCtrlsFormText0="Form Text"
Count mtLog_ActCtrlsControlClass=1
mtLog_ActCtrlsControlClass0="Control Class"
Count mtLog_ActCtrlsControlText=1
mtLog_ActCtrlsControlText0="Control Text"
Count mtLog_CmpHeader=1
mtLog_CmpHeader0="Computer"
Count mtLog_CmpName=1
mtLog_CmpName0="Name"
Count mtLog_CmpTotalMemory=1
mtLog_CmpTotalMemory0="Total Memory"
Count mtLog_CmpFreeMemory=1
mtLog_CmpFreeMemory0="Free Memory"
Count mtLog_CmpTotalDisk=1
mtLog_CmpTotalDisk0="Total Disk"
Count mtLog_CmpFreeDisk=1
mtLog_CmpFreeDisk0="Free Disk"
Count mtLog_CmpSystemUpTime=1
mtLog_CmpSystemUpTime0="System Up Time"
Count mtLog_CmpProcessor=1
mtLog_CmpProcessor0="Processor"
Count mtLog_CmpDisplayMode=1
mtLog_CmpDisplayMode0="Display Mode"
Count mtLog_CmpDisplayDPI=1
mtLog_CmpDisplayDPI0="Display DPI"
Count mtLog_CmpVideoCard=1
mtLog_CmpVideoCard0="Video Card"
Count mtLog_CmpPrinter=1
mtLog_CmpPrinter0="Printer"
Count mtLog_OSHeader=1
mtLog_OSHeader0="Operating System"
Count mtLog_OSType=1
mtLog_OSType0="Type"
Count mtLog_OSBuildN=1
mtLog_OSBuildN0="Build #"
Count mtLog_OSUpdate=1
mtLog_OSUpdate0="Update"
Count mtLog_OSLanguage=1
mtLog_OSLanguage0="Language"
Count mtLog_OSCharset=1
mtLog_OSCharset0="Charset"
Count mtLog_NetHeader=1
mtLog_NetHeader0="Network"
Count mtLog_NetIP=1
mtLog_NetIP0="IP Address"
Count mtLog_NetSubmask=1
mtLog_NetSubmask0="Submask"
Count mtLog_NetGateway=1
mtLog_NetGateway0="Gateway"
Count mtLog_NetDNS1=1
mtLog_NetDNS10="DNS 1"
Count mtLog_NetDNS2=1
mtLog_NetDNS20="DNS 2"
Count mtLog_NetDHCP=1
mtLog_NetDHCP0="DHCP"
Count mtLog_CustInfoHeader=1
mtLog_CustInfoHeader0="Custom Information"
Count mtCallStack_Address=1
mtCallStack_Address0="Address"
Count mtCallStack_Name=1
mtCallStack_Name0="Module"
Count mtCallStack_Unit=1
mtCallStack_Unit0="Unit"
Count mtCallStack_Class=1
mtCallStack_Class0="Class"
Count mtCallStack_Procedure=1
mtCallStack_Procedure0="Procedure/Method"
Count mtCallStack_Line=1
mtCallStack_Line0="Line"
Count mtCallStack_MainThread=1
mtCallStack_MainThread0="Main"
Count mtCallStack_ExceptionThread=1
mtCallStack_ExceptionThread0="Exception Thread"
Count mtCallStack_RunningThread=1
mtCallStack_RunningThread0="Running Thread"
Count mtCallStack_CallingThread=1
mtCallStack_CallingThread0="Calling Thread"
Count mtCallStack_ThreadID=1
mtCallStack_ThreadID0="ID"
Count mtCallStack_ThreadPriority=1
mtCallStack_ThreadPriority0="Priority"
Count mtCallStack_ThreadClass=1
mtCallStack_ThreadClass0="Class"
Count mtCallStack_LeakCaption=1
mtCallStack_LeakCaption0="Memory Leak"
Count mtCallStack_LeakData=1
mtCallStack_LeakData0="Data"
Count mtCallStack_LeakType=1
mtCallStack_LeakType0="Type"
Count mtCallStack_LeakSize=1
mtCallStack_LeakSize0="Total size"
Count mtCallStack_LeakCount=1
mtCallStack_LeakCount0="Count"
Count mtSendDialog_Caption=1
mtSendDialog_Caption0="Send."
Count mtSendDialog_Message=1
mtSendDialog_Message0="Message"
Count mtSendDialog_Resolving=1
mtSendDialog_Resolving0="Resolving DNS..."
Count mtSendDialog_Login=1
mtSendDialog_Login0="Login..."
Count mtSendDialog_Connecting=1
mtSendDialog_Connecting0="Connecting with server..."
Count mtSendDialog_Connected=1
mtSendDialog_Connected0="Connected with server."
Count mtSendDialog_Sending=1
mtSendDialog_Sending0="Sending message..."
Count mtSendDialog_Sent=1
mtSendDialog_Sent0="Message sent."
Count mtSendDialog_SelectProject=1
mtSendDialog_SelectProject0="Select project..."
Count mtSendDialog_Searching=1
mtSendDialog_Searching0="Searching..."
Count mtSendDialog_Modifying=1
mtSendDialog_Modifying0="Modifying..."
Count mtSendDialog_Disconnecting=1
mtSendDialog_Disconnecting0="Disconnecting..."
Count mtSendDialog_Disconnected=1
mtSendDialog_Disconnected0="Disconnected."
Count mtReproduceDialog_Caption=1
mtReproduceDialog_Caption0="Request"
Count mtReproduceDialog_Request=1
mtReproduceDialog_Request0="Please describe the steps to reproduce the error:"
Count mtReproduceDialog_OKButtonCaption=1
mtReproduceDialog_OKButtonCaption0="%26OK"
Count mtModules_Handle=1
mtModules_Handle0="Handle"
Count mtModules_Name=1
mtModules_Name0="Name"
Count mtModules_Description=1
mtModules_Description0="Description"
Count mtModules_Version=1
mtModules_Version0="Version"
Count mtModules_Size=1
mtModules_Size0="Size"
Count mtModules_LastModified=1
mtModules_LastModified0="Modified"
Count mtModules_Path=1
mtModules_Path0="Path"
Count mtProcesses_ID=1
mtProcesses_ID0="ID"
Count mtProcesses_Name=1
mtProcesses_Name0="Name"
Count mtProcesses_Description=1
mtProcesses_Description0="Description"
Count mtProcesses_Version=1
mtProcesses_Version0="Version"
Count mtProcesses_Memory=1
mtProcesses_Memory0="Memory"
Count mtProcesses_Priority=1
mtProcesses_Priority0="Priority"
Count mtProcesses_Threads=1
mtProcesses_Threads0="Threads"
Count mtProcesses_Path=1
mtProcesses_Path0="Path"
Count mtCPU_Registers=1
mtCPU_Registers0="Registers"
Count mtCPU_Stack=1
mtCPU_Stack0="Stack"
Count mtCPU_MemoryDump=1
mtCPU_MemoryDump0="Memory Dump"
Count mtSend_SuccessMsg=1
mtSend_SuccessMsg0="The message was sent successfully."
Count mtSend_FailureMsg=1
mtSend_FailureMsg0="Sorry, sending the message didn't work."
Count mtSend_BugClosedMsg=2
mtSend_BugClosedMsg0="These BUG is just closed."
mtSend_BugClosedMsg1="Contact the program support to obtain an update."
Count mtSend_UnknownErrorMsg=1
mtSend_UnknownErrorMsg0="Unknown error."
Count mtSend_InvalidLoginMsg=1
mtSend_InvalidLoginMsg0="Invalid login request."
Count mtSend_InvalidSearchMsg=1
mtSend_InvalidSearchMsg0="Invalid search request."
Count mtSend_InvalidSelectionMsg=1
mtSend_InvalidSelectionMsg0="Invalid selection request."
Count mtSend_InvalidInsertMsg=1
mtSend_InvalidInsertMsg0="Invalid insert request."
Count mtSend_InvalidModifyMsg=1
mtSend_InvalidModifyMsg0="Invalid modify request."
Count mtFileCrackedMsg=2
mtFileCrackedMsg0="This file is cracked."
mtFileCrackedMsg1="The application will be closed."
Count mtException_LeakMultiFree=1
mtException_LeakMultiFree0="Multi Free memory leak."
Count mtException_LeakMemoryOverrun=1
mtException_LeakMemoryOverrun0="Memory Overrun leak."
Count mtException_AntiFreeze=1
mtException_AntiFreeze0="The application seems to be frozen."
Count mtInvalidEmailMsg=1
mtInvalidEmailMsg0="Invalid email."
TextsCollection=English
EurekaLog Last Line -->

View File

@ -0,0 +1,313 @@
object dmGenerarAlbaranesCli: TdmGenerarAlbaranesCli
OldCreateOrder = False
Height = 176
Width = 254
object JsListaAlbaranesGenerados: TJSDialog
DialogOptions = [doCommandLinks, doModal]
Glyph.Data = {
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001C00
00001C0806000000720DDF940000000970485973000017120000171201679FD2
520000000467414D410000B18E7CFB5193000003104944415478DAAD96FB4B14
5114C7CFE463DC1E606444BFF54424D3DC55CA52B1CCD7165A219905054182FD
1452FD5810FD100406610A669A998FC4F5BDB6266265DAB60F5DD15E58FE03B2
3F99D29ABBA7B9779C71C61D9D6177CFCE70CFDCB97B3EF7DCF3BD33C38082FD
B502B2B300CC656020048688A24F036233A0671F40D43160BA87BF62AEEE1010
60D7AE293AD8B835815E9B625C80DC8F1E88D4A7C1E8C1FB8F9FD6C3C44035B3
21500A65F6D700FE2EA580A5EC551F4A50359316B31D76EFDC0EE5F72A645045
A067AE0623074B8140891108F1057064CC0D556053DF173812B707E6DCF332A8
225080D201DB4AF99BF335B4D502F371415BCC364833C4C29F458F0C2A031281
081734AB0B3C88403C1E6E3E2E7960F6A8FFD27A7D3EF07A11DA2C76C84A8D87
A57FCB32E8B8A54A4C8C21B59365C9015996EF2240B6634DF435B51460A46D1F
70C093AA46BF09C980C12CA914E6F371ADD707EF1DB3B0B0B8006EB79B8EA96B
EA5106121851245129118FD8BFA2DC5C53C6BAF5EBBBBA97C2D64EC064195B1F
286C76E956A0EA5C51AEB4764A9929F5750D5A9581D2274B9B651C0BA2F514A8
6F28E36B70AD9A4253EF97A9AA55B0CEBA87D03B645B3F43C1DE589C58186D10
81150FCAC57B11E161B04517099BB953C78643141B01BA28EEE4DAB0B04DE2B8
CA460B9C399902E661BB3AB0F5AD038BF30CD4D7E7DD14815A61023027DD00EF
469C1A80FD1C307F1578FD4A81E665945AD68924181A9D5007B6F4DBF1527E32
F5C9D3632351F8F549AEE916B14EAA039BCD362C31A6040D23E7887D4A03B0CF
86C5C6641A24BB7646D3F2D51A77F8C1BCDCFFC79CD3EAC0D7BD56AE86294165
4660CB5C6B737DD3062CCA31D00069E76E05241862CF1EDD05E7D40F756063CF
673C7F5A4F679A59541EF03E4C8C3B0893DF67D481AFBAC7B0F05412CD30EBE2
ED80F7617CEC0198FEF94B1BF06C6622AD4B4EC99D80F7A1666043D7281A3312
FD84C20B8417C3AA789405239826E0CBCE4F98979E10344C33B0BE630473D312
82866906D6993E62F6F1C3F45D160A5305BE68FF8095CF5B4302134CFE1185EA
1FB8A1B4FF4FE32FF6FADB8B5E0000000049454E44AE426082}
Instruction.Text = 'Se ha generado el albar'#225'n de cliente'
Instruction.Glyph.Data = {
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001C00
00001C0806000000720DDF940000000970485973000017120000171201679FD2
520000000467414D410000B18E7CFB5193000003104944415478DAAD96FB4B14
5114C7CFE463DC1E606444BFF54424D3DC55CA52B1CCD7165A219905054182FD
1452FD5810FD100406610A669A998FC4F5BDB6266265DAB60F5DD15E58FE03B2
3F99D29ABBA7B9779C71C61D9D6177CFCE70CFDCB97B3EF7DCF3BD33C38082FD
B502B2B300CC656020048688A24F036233A0671F40D43160BA87BF62AEEE1010
60D7AE293AD8B835815E9B625C80DC8F1E88D4A7C1E8C1FB8F9FD6C3C44035B3
21500A65F6D700FE2EA580A5EC551F4A50359316B31D76EFDC0EE5F72A645045
A067AE0623074B8140891108F1057064CC0D556053DF173812B707E6DCF332A8
225080D201DB4AF99BF335B4D502F371415BCC364833C4C29F458F0C2A031281
081734AB0B3C88403C1E6E3E2E7960F6A8FFD27A7D3EF07A11DA2C76C84A8D87
A57FCB32E8B8A54A4C8C21B59365C9015996EF2240B6634DF435B51460A46D1F
70C093AA46BF09C980C12CA914E6F371ADD707EF1DB3B0B0B8006EB79B8EA96B
EA5106121851245129118FD8BFA2DC5C53C6BAF5EBBBBA97C2D64EC064195B1F
286C76E956A0EA5C51AEB4764A9929F5750D5A9581D2274B9B651C0BA2F514A8
6F28E36B70AD9A4253EF97A9AA55B0CEBA87D03B645B3F43C1DE589C58186D10
81150FCAC57B11E161B04517099BB953C78643141B01BA28EEE4DAB0B04DE2B8
CA460B9C399902E661BB3AB0F5AD038BF30CD4D7E7DD14815A61023027DD00EF
469C1A80FD1C307F1578FD4A81E665945AD68924181A9D5007B6F4DBF1527E32
F5C9D3632351F8F549AEE916B14EAA039BCD362C31A6040D23E7887D4A03B0CF
86C5C6641A24BB7646D3F2D51A77F8C1BCDCFFC79CD3EAC0D7BD56AE86294165
4660CB5C6B737DD3062CCA31D00069E76E05241862CF1EDD05E7D40F756063CF
673C7F5A4F679A59541EF03E4C8C3B0893DF67D481AFBAC7B0F05412CD30EBE2
ED80F7617CEC0198FEF94B1BF06C6622AD4B4EC99D80F7A1666043D7281A3312
FD84C20B8417C3AA789405239826E0CBCE4F98979E10344C33B0BE630473D312
82866906D6993E62F6F1C3F45D160A5305BE68FF8095CF5B4302134CFE1185EA
1FB8A1B4FF4FE32FF6FADB8B5E0000000049454E44AE426082}
Instruction.Icon = tdiCustom
CustomButtons = <
item
Caption = 'Ver el albar'#225'n'
Value = 100
Info.Strings = (
'Mostrar el albar'#225'n que se ha creado')
end>
ButtonBar.Buttons = [cbOK]
ButtonBar.Cancel = cbOK
ButtonBar.UseCancel = False
MainIcon = tdiCustom
Title = 'FactuGES'
Position = dpMainFormCenter
Icon.Data = {
0000010003002020100001000400E8020000360000002020000001000800A808
00001E0300002020000001002000A8100000C60B000028000000200000004000
0000010004000000000000020000000000000000000000000000000000000000
000000008000008000000080800080000000800080008080000080808000C0C0
C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000
0000000000000000000000000000000008777777777777777777777700000000
0877767777677776777767760000000008F88888888888888888888700000000
08F8FF8F8F888888888888860000000008FF8F8F88F8F8888888888C00000000
08F88888F8888888888888860000000008F8688878E8888E88E8788700000000
08F8688888F8F8FFFFFF88760000000008FF4888888F8FFFFFFF788700000000
08F8676767677677677658E50000000008FF8888888887878787888700000000
08FF8887887E8888888888860000000008FFE8E8E788C8E8FF8F8F8600000000
08FFF8F8F8F8FF8F88F8F8870000000008FFFFFF8FF8F8F8F88F888600000000
0FF8477878787878788788860000000008FF68888888F8FF8F8F788700000000
08B7588888FF8FFFFFFF78860000083008BB47887776777777776F86000000B7
8B9B73BB88788787E87878870000008BB8B9BB78888888EFF8F8FF8600000087
B8BB8B888E8E8E88FFF8F886000000088BBB888FFFFFFFFFF8F877770000B9BB
B8FFBB9B9BFFFFFFF87466460000BBB9BB8FBBBBB8FFFFFFF88F888700000008
B8BB88888FFFFFFFF88F8F7700000008BBBBBB8FFFFFFFFFFF8887700000007B
B7B98BB8FFFFFFFFF8887700000000B78B9B87B888F88F88F8877000000007B0
08BB883B78888788787700000000000000B9000000000000000000000000FFFF
FFFFF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800
000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800
000FF800000FF800000F9800000FC000000FC000000FC000000FE000000F0000
000F0000000FE000000FE000001FC000003FC000007F980000FFFCFFFFFF2800
0000200000004000000001000800000000000004000000000000000000000001
00000001000000000000694731007C5D49007E604C0081635000826451008567
540085685500886B5900896D5B008A6E5D008B705F008E715F008B7260008C72
61008E74640084766C00957A6900977D6D00887B72009A8171009D8272009C84
76009D8778009F897B00A28A7900A08B7D00A18C7E00E1B06E00E1B67D003E7A
970073A0A5007AA2B70074AFBD007BB2BB003CAACE0028A5DB0020ADDF000D9A
E500209EE3000DA6E2001AA4EF0000A6FF000CABFE0009ACFE0010A4F10015AC
FA0000B5FB0000B0FD000CB6FC0000BFF90000BAFD0004BAFD0009BBFB0013B6
F40015BFFA001CBDFB0026B7FD00589EC50040A4CD0040ABCC0050A2C7005DAE
C00060A3C20062A4C60060B7CB006AB0CD007BB6C80077BAC80061BADD0044AD
E50000C3F80007C6FB0000CAF80000CFFB0000D4F90026C8FA0026CDF8002BCC
F90039C4FB0039C2FC0039CAFA003FCFFB0024D6F80030D2F80039D5F80000F8
F8001FF8F8002CF6F8003EF4F8005AC6DC0070CDDF0052C0E40054C9E3004DCE
FA005FC7FF004FD2FB004DD9F8005FD9FB006ED3E70063CDFE0060D1FB0060D8
F90060DDF80046F8F90056F0F8005FFAFA0073E3F80073E4F90073EEF80060F1
F800958A84009A918C0081999500A68F8200AD968500A3968C00AE988900AD9A
8D00B19A8B00AF9C9000B09E9200B59F9200B7A29300B2A19600B5A19400B7A4
9700BDA79700B4A39800B1A59D00B4A79F00BAA69800BCA79900B4A89F00BCA8
9900BAA89C00BDAA9D00BEAC9E0083ADBD00B5A9A100BDABA000BEADA100BFAF
A500A0BABE00C0AB9E00C1AC9E00C6AE9F00E2B98100E4BA8300E4BB8400E5BC
8500E1BD8E00E3BF9000C0ADA000C2B0A300C2B1A500C4B2A600C1B2A800C3B5
AB00C8B4A800CCB9AD00CEBCB100D0BEB200D1BFB400E4C19300E5C29400E6C4
9600E8C69900D0C9A300CFC1B800D2C1B600D3C3B800D5C4B900D6C6BC00D8C6
BC00D6C8BE00DAC9BF00ECD3B000EDD4B200EFD6B500E7D1B800E7D3BD00F0D8
B6008CB7C40080BEC70097C3C70099C3C900ABD7CF00AFD9DD0086E3F90086E7
F90086ECF8009EE5FB0090E8F900ACEDFC00BCEAFD00BCF1FB00BFF1FD00D7C9
C000D9CAC100DCCBC200DACCC200DDCCC300DACCC400DDCEC400DED0C600DED1
C900DED3CC00DFD4CD00E1D1C900E2D5CD00F0DCC200E3D8D200E5D9D200E2DA
D500E6DBD400E5DCD500E8DDD600E6DDD800E9DFD900E6E0DB00EAE0DA00EAE2
DD00ECE3DE00EBE4DE00ECE4DE00F3E7D900C6E1EF00C9EFFD00D7F6FD00DFF3
FF00DFFEFE00EBE7E300EDE6E100EFE7E400EEE8E400F0EAE600F2EDE900F2EE
EC00F4EFEC00F5F0EE00F9F4ED00E7FAFD00EBF8FF00F6F2F000F7F4F100F8F4
F200F9F7F500FAF8F600FBF9F900FCFBFA00FCFCFB00FEFEFE00000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000007D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D
0D0D0000000000000000009C9C19191919191919191919191919191919191919
1903000000000000000000ABDECBCBC7C7AFABABABABAAA3A2A2A0A0A0A0A0A0
8607000000000000000000ABECEAE9DEDEDEDED7D5D2D2D2CBCBCBCBB0CBB0CB
9007000000000000000000ABEDECEAE9DEDEDBD7D7D5D2D2D2CDCDCBB0B0B0B0
9007000000000000000000AFEDE9A9CFD2CFD2CDCBCBCBB0B0ABACA3A3A3A3B0
9007000000000000000000AFF0D5017783838386868686869099909999907BB0
9007000000000000000000B0F4D501A0B0CBD2D5DEECEDF7FAFAFAFAFAF77BAA
9007000000000000000000CBF4DC01A0B0B0B0D2D5DBEAEDF7FAFAFAFAF47BB0
9007000000000000000000CBF8DC010404070604090909090D0D110D110D02A3
9007000000000000000000CBFAED9E9E9E9C999E8C8C8C868683837E7D7D7ACB
9007000000000000000000CBFAF1A7A7A6A6A6A69898989898B5DBDBD5D5D2D2
9907000000000000000000CDFAF796969696961D961D931D1DB4DEDBD7D5D5D2
9C07000000000000000000CFFAFAFAFAF8F7F0F0EDEDEDECE9E9DEDEDED7D5D5
9907000000000000000000CDFAFAEAF0EDEDECEAEAE9DEDEDBDCD5D5D5D5D2D5
9C07000000000000000000D2FAEC01737D7D7B7D7D7B7D7B7D7B7B7B7D7B7DD2
9907000000000000000000CFFAEC019EABB0CBD2D5DCDEECEDF4F4F4F4EA7BD2
9C07000000000000000000B9524601A0B0B0CBB5D5DEEAEDF7FAFAFAFAF47DD5
9C070000000000213F0000B83226010C3F5C1F111214141616191B1B1B1807D2
9C07000000000000253D8A5B322D711E2860BA7E7E7A7E797A797979767676D5
9E0700000000000041375E662F2B65314EBBB6B6B6B6B4B4B1E2F4EDEDEDECEA
9C070000000000008F5D66663232394EC1A81C1C1C1C1C1C1CD3F7F4EDDED7D5
9C0700000000000000B7BE6E5758BEBDE4E6E6F3FAFAFAFAFAFAF7F4D5928675
7304000000002A2A2A2A4A6AFAE7562F2A2A2A5FFAFAFAFAFAFAF8D577010101
0101000000004747472F4A59C5E7564A32474766FAFAFAFAFAFAFADCA0D2CFB0
A20C00000000000000436C6958686D6BC2C5C5E7FAFAFAFAFAFAFADEAADEDBCB
1470000000000000004551534A4A5250C0E7FAFAFAFAFAFAFAFAFADEAAD7B514
700000000000000042384C54472B613550C3FAFAFAFAFAFAFAFAFADEA1B0196F
000000000000000024234463322EBC5A3664E3ECE9E9E9E9E9E9E9CF90731300
000000000000003A3C00002232298B8B3E3B207E8B7E8B7E827E817E74100000
0000000000000000000000003227000000000000000000000000000000000000
000000000000FFFFFFFFF800000FF800000FF800000FF800000FF800000FF800
000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800
000FF800000FF800000FF800000FF800000F9800000FC000000FC000000FC000
000FE000000F0000000F0000000FE000000FE000001FC000003FC000007F9800
00FFFCFFFFFF2800000020000000400000000100200000000000801000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000007067
5F70AA9382E570513CE3735540E3735540E3735540E3735540E3735540E37355
40E3735540E3735540E3735540E3735540E3735540E3735540E3735540E37355
40E3735540E3735540E3735540E3735540E3735540E3735540E372533EE5BAAB
A070000000000000000000000000000000000000000000000000000000005E54
4C7FCAB7ABFFC5B5AAFFA18877FFA28A78FFA28A79FFA28A79FFA28A79FFA28A
79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A
79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA58D7CFF7A5B46FFB2A1
967F000000000000000000000000000000000000000000000000000000006055
4D7ED7C6BBFFEDE4E0FFD9CCC4FFD9CCC4FFD9CBC3FFD8CAC1FFD7C9BFFFD6C7
BDFFD5C6BBFFD4C4BAFFD3C3B8FFD2C1B7FFD1C0B5FFD0BEB3FFCFBDB2FFCEBC
B0FFCEBBAFFFCEBBAFFFCEBBAFFFCEBBAFFFCEBCB0FFBEAA9CFF82644FFFB2A1
967E000000000000000000000000000000000000000000000000000000006056
4D7ED7C8BCFFF2EBE8FFEFE9E5FFEEE7E2FFECE5E0FFEBE2DEFFEAE0DBFFE9DE
D8FFE7DBD4FFE5D9D1FFE3D7CFFFE2D4CCFFE1D2C9FFDFD0C7FFDDCDC4FFDCCB
C2FFDBC9BFFFDBC9BFFFDBC9BFFFDBC9BFFFDCCAC1FFC1AC9FFF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006155
4E7ED8C9BDFFF3EDE9FFF1EAE6FFF0E9E6FFEEE6E1FFECE4DFFFEBE2DDFFEAE0
DAFFE9DED7FFE7DBD4FFE5D9D1FFE3D7CFFFE2D4CCFFE1D2C9FFDFD0C7FFDDCD
C4FFDCCBC2FFDBC9BFFFDBC9BFFFDBC9BFFFDCCAC0FFC1AC9FFF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006157
4E7ED9C9BFFFF4EFEDFFEFE8E3FFD0C2B9FFDFD5CEFFE0D5CEFFE0D4CCFFDED3
CBFFDDD1C8FFDCCFC6FFDACCC4FFD9CBC1FFD8C9BFFFD7C7BDFFD6C5BBFFD5C4
B9FFD3C2B7FFD2C0B5FFD2BFB4FFD2BFB4FFDAC8BEFFC1AC9FFF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006256
4F7EDACCC0FFF5F2EFFFE5DDD9FF5C3821FFB0998AFFB8A394FFB8A394FFB9A3
94FFB8A495FFB9A597FFB9A698FFBAA698FFBBA799FFBBA89AFFBBA89BFFBCA8
9BFFBCA89BFFBCA89BFFBBA89AFFB49E8FFFD8C6BBFFC1AC9FFF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006256
4F7EDBCBC1FFF8F4F3FFE7E0DBFF5F3C24FFD0BDB2FFDCCBC1FFDDCCC3FFE2D2
CBFFE7DBD4FFEDE2DEFFF0E8E6FFF5F0EDFFF9F7F4FFFDFDFDFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFAF8F7FFB39D8DFFD8C6BBFFC1AC9FFF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006256
4F7EDCCEC3FFFAF6F5FFE9E2DDFF5F3C24FFD2BFB5FFDFCDC4FFDECCC3FFE0CE
C6FFE4D4CDFFE9DDD6FFEFE4E0FFF1EAE8FFF7F1EFFFFBF8F6FFFFFEFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFCFBFAFFB5A090FFD9C7BEFFC1AD9FFF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006257
4F7EDDCFC4FFFCF9F9FFE9E4E0FF5F3A23FF7C5D49FF7F5F4CFF7E5F4CFF7E60
4DFF7F614DFF816350FF826552FF836654FF846856FF856A57FF866B59FF876C
5BFF876D5BFF876D5BFF866B59FF72523DFFD5C3B9FFC1AFA1FF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006357
507EDECFC6FFFCFCFBFFF4F1F0FFC3B6AEFFC3B5ADFFC1B4ACFFC0B3AAFFBFB1
A9FFBEB0A6FFBDAEA5FFBDACA3FFBCABA2FFBBAAA0FFBAA99FFFB8A69AFFB8A4
98FFB6A396FFB5A194FFB49F93FFB39D90FFDCCDC4FFC2AEA1FF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006357
507EDFD2C7FFFEFEFDFFF9F5EFFFE8C696FFE9C799FFE8C697FFE7C596FFE7C4
95FFE6C394FFE5C293FFE4C091FFE4C090FFE3BF8FFFE2BD8CFFE9D5BFFFEBE1
DCFFEADFD8FFE7DCD5FFE5DAD3FFE4D8D0FFE3D4CCFFC2AFA2FF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006458
517EE0D3C8FFFFFFFFFFFAF5EFFFE3B77CFFE4B97FFFE2B87EFFE3B77DFFE2B7
7CFFE2B67BFFE1B57AFFE1B479FFE0B478FFE0B377FFDFB174FFE6D0B7FFEBE1
DCFFE8DFD9FFE8DDD6FFE6D9D2FFE3D8D1FFE4D7CFFFC3AFA2FF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006458
517EE1D2C9FFFFFFFFFFFEFEFDFFFEFFFFFFFCFDFEFFFBFBFBFFF9F7F8FFF8F5
F6FFF7F3F2FFF5F1F0FFF4EFEEFFF1EDEBFFF0EBE9FFEEE9E6FFEDE6E2FFECE3
DEFFEBE1DBFFE9DFD9FFE8DDD6FFE6DAD3FFE5D9D2FFC3B0A3FF81634FFFB2A1
967E000000000000000000000000000000000000000000000000000000006459
517EE1D4CAFFFFFFFFFFFDFDFCFFEEEBE8FFF5F2F0FFF4F0EFFFF3EFECFFF2ED
EAFFF1EBE8FFEEE9E5FFEFE7E3FFECE5E1FFEAE4DEFFEAE1DCFFE8E0DAFFE7DE
D8FFE6DDD6FFE5DBD4FFE4D8D1FFE2D6CEFFE6DBD4FFC3B1A4FF81634EFFB2A1
967E000000000000000000000000000000000000000000000000000000006559
527EE2D4CAFFFFFFFFFFF0ECEAFF5B361EFFAB9383FFB39D8EFFB39D8DFFB39D
8DFFB29D8DFFB29C8DFFB29C8CFFB29C8CFFB29C8CFFB29C8CFFB29C8CFFB29C
8CFFB29C8CFFB29C8CFFB29C8DFFB39D8EFFE3D8D0FFC4B1A4FF81634EFFB2A1
967E000000000000000000000000000000000000000000000000000000006559
527EE5D4CAFFFFFFFFFFF7F0EBFF5F3B24FFCCB8ADFFD7C5BAFFD9C7BDFFDCCC
C3FFE1D4CCFFE5DAD4FFE8E0DBFFEDE5E1FFF1EBE9FFF5F2EFFFF7F5F3FFF8F6
F4FFF8F5F4FFF8F6F4FFF1EEEAFFB29C8DFFE6DAD3FFC4B2A5FF81634EFFB2A1
967E00000000000000000000000000000000000000000000000000000000685A
527E9AC6C9FF35CFFEFF3DAEEBFF663E24FFD2BFB4FFE0CBBFFFE0C9BDFFE1CD
C4FFE4D5CDFFE9DED7FFEEE5E0FFF2EBE8FFF6F2F0FFFCF8F8FFFFFFFEFFFFFF
FFFFFFFFFFFFFFFFFFFFFCFAF9FFB49E8FFFE7DED7FFC5B3A6FF81634EFFB2A1
967E00000000000000000000000000000000007792910072A7A3001E33366957
4C7C86C1C8FF00BFFBFF079AEBFF6A3E23FF926D57FF5FA3C8FF4AC1E8FF6C9C
A2FF917260FF927767FF947A69FF957C6CFF977E6FFF998171FF9A8374FF9B85
76FF9C8678FF9C8678FF998274FF7D5E49FFE3D9D4FFC5B3A7FF81634EFFB2A1
967E00000000000000000000000000000000005A6F7000A9E5E40075AEAE5C90
A5BD75D0E0FF00BFFAFF0CA3F4FF8A9A91FF3C7492FF03A4E4FF4AD5FFFF98C4
CBFFB3A196FFB1A197FFB0A096FFB09F95FFAF9D92FFAF9C91FFAD9A8EFFAC99
8CFFAB988AFFAB9789FFAA9688FFA99386FFE8E0DAFFC5B4A7FF81634EFFB2A1
967E00000000000000000000000000000000000000002DA5BFC110C2FFFF4DD0
FDFF64DBF9FF00B3FAFF09A8FEFF68D7FFFF04B5FFFF24CCFBFFAFD8CEFFF7DA
B8FFF3DBBBFFF3DBBAFFF2D9B9FFF1D8B7FFF0D7B4FFEED5B2FFF6EADDFFF9F6
F4FFF7F3F1FFF5F1EEFFF5EFECFFF4EDEAFFF1EBE7FFC6B4A8FF81634EFFB2A1
967E00000000000000000000000000000000000000005F8A909142C7E4E960DE
F8FF64D7FAFF00B6FDFF00B8FDFF21B2FDFF1ECCF7FF93EBFCFFD2C69BFFE1AB
63FFDFAC66FFDFAC66FFDFAC66FFDFAC66FFDFAC66FFDEA961FFEFDBC0FFF8F6
F5FFF6F2F0FFF3EDEBFFECE2DCFFE9DFD9FFE5DBD6FFC2B1A4FF81634FFFB2A1
967E000000000000000000000000000E171A000E171A00040B145994A4A990EB
FCFF61F1F7FF13FAF7FF23F9F7FF93EDF7FF8CE5F8FFD5F2FDFFE9F8FFFFE7F8
FFFFF0FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFDFEFFFFFAFAF9FFF9F7
F5FFF7F2F0FFE8DFD8FFC7AE9FFFBEA998FFAF9888FFB09A8AFF7F604DFFB2A1
967E00000000000000000000000000AAFFFF00AAFFFF00AAFFFF00A4FFFF00CD
FAFF5DFCF9FFFFFFFFFFEEFEFEFF00FBF7FF00AAFEFF00A1FFFF00A1FFFF00A0
FFFF56C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFBFFFCFBFAFFFBFA
F8FFE6DDD6FFAA9180FF5D3922FF603D26FF613E27FF613E28FF634029FFB4A3
987E00000000000000000000000000CAFFFF00CAFFFF00CBFFFF00B0FFFF00CD
FBFF38F5F7FFC3EFFAFFF0FFFEFF00FAF7FF00C8F7FF00C2F7FF00C2F7FF00C1
F7FF57D7FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFDFDFCFFFCFC
FBFFE7DED8FFCCB9ACFFE6DBD5FFE2D7D0FFDCCFC5FFD7C5BBFF8E705DFFB4A2
9680000000000000000000000000002E383C002E383C00252F364C99B0B57DE8
FBFF59F1F7FF25F7F7FF41FAF8FF7CEEF7FF77E4F7FFB5EFFCFFC6F2FDFFC3F2
FDFFD9F6FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEFFFEFE
FEFFE9E1DAFFCEBCAFFFF1E9E3FFEADFD8FFE4D5CCFF9D816FFF3A291F868985
831C00000000000000000000000000000000000000004E7073774AB0DADC37C9
FBFF22D5F7FF00D3F9FF02C3FBFF37D5F7FF34BEFCFFA2E6FAFFECFBFDFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF
FFFFEAE2DCFFCDBBADFFEADFD8FFE3D5CBFF9F8271FF3E2D2386050100200000
000000000000000000000000000000000000000000003E9CC4C219C0FFFF23C9
FCFF30D3F8FF00BEF8FF06A8FEFF4FDCF8FF00B8FCFF32C2FBFFC0EBFCFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFEAE3DEFFCDB9ABFFDDCEC4FFA58979FF3E2C1F8F0905041B000000000000
000000000000000000000000000000000000003451510099DDDB0091C0C35DAD
BCCF76D7E9FF00BEF9FF10A9FBFFBDDEDEFF5AC8DDFF0AB5F7FF62CEFFFFCBE4
F1FFF1E7E0FFEFE7E1FFEEE6E1FFEEE6E1FFEEE6E0FFEDE6E0FFEDE5E0FFEEE6
E1FFE1D4CCFFC5AE9FFFA68D7FF53E2718A10402000E00000000000000000000
0000000000000000000000000000000000000075B7AF0099C7C500323E425442
3B5C6BA8B1DA00C1FCFF0EA1F3F8A98E80C0AB9081C12698B1C10088C4C14C85
A3C1A18D80C19E8D81C19E8B81C19D8C80C19B8C7FC19B8A7FC19C897FC19A89
7EC19B8B7EC1897769C2432B1BAC000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000045565A00C5FFFF0094E6E2000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFFFFF0000007F0000007F0000007F000
0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000
0007F0000007F0000007F0000007F0000007F0000007F0000007800000078000
0007C0000007C000000700000007000000070000000700000007C000000FC000
001F8000003F800000FFF8FFFFFF}
Width = 450
Left = 72
Top = 16
end
end

View File

@ -0,0 +1,296 @@
unit uGenerarAlbaranesCliUtils;
interface
uses
Windows, SysUtils, Classes, pngimage, JSDialog,
uBizContratosCliente, uBizAlbaranesCliente;
type
TdmGenerarAlbaranesCli = class(TDataModule)
JsListaAlbaranesGenerados: TJSDialog;
end;
function GenerarAlbaranCli(const IDContrato : Integer) : Boolean; overload;
function GenerarAlbaranCli(AContrato : IBizContratoCliente; var AAlbaran: IBizAlbaranCliente) : Boolean; overload;
// function ElegirPedidoYGenerarAlbaranCli(var IDAlbaran: Integer) : Boolean;
function ElegirContratoYGenerarAlbaranCli(var IDAlbaran: Integer) : Boolean;
implementation
{$R *.dfm}
uses
uDialogUtils, uBizDetallesContratoCliente, uBizDetallesAlbaranCliente,
uContratosClienteController, uAlbaranesClienteController, uClientesController,
uDetallesAlbaranClienteController, uControllerDetallesBase,
uBizContactos, schAlbaranesClienteClient_Intf,
schContratosClienteClient_Intf, uBizDetallesPresupuestoCliente;
var
dmGenerarAlbaranesCli: TdmGenerarAlbaranesCli;
AContratosClienteController : IContratosClienteController;
AAlbaranesClienteController : IAlbaranesClienteController;
AClientesController : IClientesController;
{ Métodos auxiliares }
procedure CopiarContratoAAlbaran(AContrato: IBizContratoCliente; AAlbaran : IBizAlbaranCliente);
begin
if not Assigned(AAlbaran) then
raise Exception.Create ('Albarán no asignado (CopiarContratoAAlbaran)');
if not Assigned(AContrato) then
raise Exception.Create ('Contrato no asignado (CopiarContratoAAlbaran)');
if not AContrato.DataTable.Active then
AContrato.DataTable.Active := True;
// El albarán tiene que venir ya abierto y posicionado donde hay que copiar
AAlbaran.ID_CLIENTE := AContrato.ID_CLIENTE;
// Lo dejamos listo para que se localize la subcuenta contable asociada al cliente
AAlbaranesClienteController.RecuperarCliente(AAlbaran);
AAlbaran.Cliente.Open;
// AAlbaran.NIF_CIF := AContrato.NIF_CIF;
AAlbaran.NOMBRE := AContrato.NOMBRE;
AAlbaran.CALLE := AContrato.CALLE;
AAlbaran.POBLACION := AContrato.POBLACION;
AAlbaran.PROVINCIA := AContrato.PROVINCIA;
AAlbaran.CODIGO_POSTAL := AContrato.CODIGO_POSTAL;
// AAlbaran.PERSONA_CONTACTO := AContrato.PERSONA_CONTACTO;
// AAlbaran.DataTable.FieldByName(fld_FacturasClientePLAZO_ENTREGA).AsVariant := AContrato.DataTable.FieldByName(fld_ContratosClientePLAZO_ENTREGA).AsVariant;
AAlbaran.DataTable.FieldByName(fld_AlbaranesClienteOBSERVACIONES).AsVariant := AContrato.DataTable.FieldByName(fld_ContratosClienteOBSERVACIONES).AsVariant;
AAlbaran.IMPORTE_NETO := AContrato.IMPORTE_NETO;
AAlbaran.IMPORTE_PORTE := AContrato.IMPORTE_PORTE;
AAlbaran.DESCUENTO := AContrato.DESCUENTO;
AAlbaran.IMPORTE_DESCUENTO := AContrato.IMPORTE_DESCUENTO;
AAlbaran.BASE_IMPONIBLE := AContrato.BASE_IMPONIBLE;
AAlbaran.ID_TIPO_IVA := AContrato.ID_TIPO_IVA;
AAlbaran.IVA := AContrato.IVA;
AAlbaran.IMPORTE_IVA := AContrato.IMPORTE_IVA;
AAlbaran.IMPORTE_TOTAL := AContrato.IMPORTE_TOTAL;
AAlbaran.ID_TIENDA := AContrato.ID_TIENDA;
AAlbaran.ID_CONTRATO := AContrato.ID;
// AAlbaran.ID_VENDEDOR := AContrato.ID_VENDEDOR;
// AAlbaran.RECARGO_EQUIVALENCIA := AContrato.RECARGO_EQUIVALENCIA;
// AAlbaran.RE := AContrato.RE;
// AAlbaran.IMPORTE_RE := AContrato.IMPORTE_RE;
// AAlbaran.TIPO_FACTURA := AContrato.TIPO_CONTRATO;
end;
procedure CopiarDetallesAAlbaran(
AContrato: IBizContratoCliente;
AAlbaran: IBizAlbaranCliente;
AArticulos: IBizDetallesContratoCliente);
var
i : integer;
ADetalles : IBizDetallesAlbaranCliente;
ADetallesController : IDetallesAlbaranClienteController;
begin
if not Assigned(AAlbaran) then
raise Exception.Create ('Albarán no asignada (CopiarDetallesAAlbaran)');
if not Assigned(AContrato) then
raise Exception.Create ('Contrato no asignado (CopiarDetallesAAlbaran)');
if not Assigned(AArticulos) then
raise Exception.Create ('Artículos no asignado (CopiarDetallesAAlbaran)');
if not AArticulos.DataTable.Active then
AArticulos.DataTable.Active := True;
// El contrato tiene que venir ya abierto y posicionado donde hay que copiar
ADetalles := AAlbaran.Detalles;
ADetallesController := TDetallesAlbaranClienteController.Create;
try
//OJO IMPORTANTE
//Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para
//obligarle siempre a recalcular los detalles una sola vez
ADetallesController.BeginUpdate(ADetalles);
AArticulos.DataTable.First;
for i := 0 to AArticulos.DataTable.RecordCount - 1 do
begin
ADetallesController.Add(ADetalles, AArticulos.TIPO_DETALLE);
ADetalles.Edit;
ADetalles.REFERENCIA := AArticulos.REFERENCIA;
ADetalles.ID_ARTICULO := AArticulos.ID_ARTICULO;
if (AArticulos.PROPIEDAD <> '') then
ADetalles.CONCEPTO := AArticulos.PROPIEDAD + ': '+ AArticulos.CONCEPTO
else
ADetalles.CONCEPTO := AArticulos.CONCEPTO;
if not AArticulos.CANTIDADIsNull then
ADetalles.CANTIDAD := AArticulos.CANTIDAD;
if not AArticulos.IMPORTE_UNIDADIsNull then
ADetalles.IMPORTE_UNIDAD := AArticulos.IMPORTE_UNIDAD;
if not AArticulos.IMPORTE_TOTALIsNull then
ADetalles.IMPORTE_TOTAL := AArticulos.IMPORTE_TOTAL;
if not AArticulos.DESCUENTOIsNull then
ADetalles.DESCUENTO := AArticulos.DESCUENTO;
if not AArticulos.IMPORTE_PORTEIsNull then
ADetalles.IMPORTE_PORTE := AArticulos.IMPORTE_PORTE;
ADetalles.VISIBLE := AArticulos.VISIBLE;
ADetalles.REFERENCIA_PROVEEDOR := AArticulos.REFERENCIA_PROVEEDOR;
ADetalles.Post;
AArticulos.Next;
end;
finally
ADetallesController.EndUpdate(ADetalles);
ADetallesController := NIL;
end;
end;
procedure Inicializar;
begin
dmGenerarAlbaranesCli := TdmGenerarAlbaranesCli.Create(nil);
AContratosClienteController := TContratosClienteController.Create;
AAlbaranesClienteController := TAlbaranesClienteController.Create;
AClientesController := TClientesController.Create;
end;
procedure Finalizar;
begin
FreeAndNIL(dmGenerarAlbaranesCli);
AContratosClienteController := nil;
AAlbaranesClienteController := nil;
AClientesController := nil;
end;
function GenerarAlbaranCli(const IDContrato : Integer) : Boolean; overload;
var
AContrato : IBizContratoCliente;
AAlbaran : IBizAlbaranCliente;
begin
Result := False;
try
if not Assigned(AContratosClienteController) then
Inicializar;
AContrato := AContratosClienteController.Buscar(IDContrato);
if Assigned(AContrato) then
Result := GenerarAlbaranCli(AContrato, AAlbaran);
finally
if Assigned(AContratosClienteController) then
Finalizar;
end;
end;
function GenerarAlbaranCli(AContrato : IBizContratoCliente; var AAlbaran: IBizAlbaranCliente) : Boolean; overload;
var
ARespuesta : Integer;
begin
AAlbaran := NIL;
if not Assigned(AContrato) then
raise Exception.Create('Contrato de cliente no asignado (GenerarAlbaranCli)');
if not AContrato.DataTable.Active then
AContrato.DataTable.Active := True;
if not Assigned(AContratosClienteController) then
Inicializar;
try
AAlbaran := AAlbaranesClienteController.Nuevo;
CopiarContratoAAlbaran(AContrato, AAlbaran);
CopiarDetallesAAlbaran(AContrato, AAlbaran, AContrato.Detalles);
//Sustituir por if de guardar
if AAlbaranesClienteController.Guardar(AAlbaran) then
begin
// Asocio el contrato al presupuesto
with dmGenerarAlbaranesCli.JsListaAlbaranesGenerados do
begin
Instruction.Text := 'Se ha generado el albarán';
Content.Clear;
Content.Add(Format('Se ha generado correctamente el albarán %s a partir del contrato de cliente' + #10#13, [AAlbaran.REFERENCIA]));
Execute;
ARespuesta := CustomButtonResult;
case ARespuesta of
100 : begin
// Ver el albarán
AAlbaranesClienteController.Ver(AAlbaran);
end;
200 : // Continuar;
end;
end;
end;
Result := True;
finally
if Assigned(AContratosClienteController) then
Finalizar;
end;
end;
function ElegirContratoYGenerarAlbaranCli(var IDAlbaran: Integer) : Boolean;
var
AContrato : IBizContratoCliente;
AAlbaran : IBizAlbaranCliente;
begin
Result := False;
IDAlbaran := -1;
AAlbaran := NIL;
try
if not Assigned(AContratosClienteController) then
Inicializar;
AContrato := AContratosClienteController.ElegirContratos(AContratosClienteController.BuscarTodos,
'Elija el contrato de cliente que desea utilizar para dar de alta el albarán.', False);
if Assigned(AContrato) then
begin
Result := GenerarAlbaranCli(AContrato, AAlbaran);
if Result then
IDAlbaran := AAlbaran.ID;
end;
finally
if Assigned(AContratosClienteController) then
Finalizar;
end;
end;
{
function ElegirPedidoYGenerarAlbaranCli(var IDAlbaran: Integer) : Boolean; overload;
var
APedido : IBizPedidoCliente;
AAlbaran : IBizAlbaranCliente;
begin
Result := False;
IDAlbaran := -1;
AAlbaran := NIL;
try
if not Assigned(APedidosClienteController) then
Inicializar;
APedido := APedidosClienteController.ElegirPedidos(APedidosClienteController.BuscarPendientes,
'Elija el pedido de cliente que desea utilizar para dar de alta el albarán de cliente.'
, False);
if Assigned(APedido) then
begin
Result := GenerarAlbaranCli(APedido, AAlbaran);
if Result then
IDAlbaran := AAlbaran.ID;
end;
finally
if Assigned(APedidosClienteController) then
Finalizar;
end;
end;
}
end.

View File

@ -40,114 +40,6 @@
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Package_Options><Package_Options Name="ImplicitBuild">False</Package_Options><Package_Options Name="DesigntimeOnly">False</Package_Options><Package_Options Name="RuntimeOnly">False</Package_Options></Package_Options><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">3082</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dclsmp100.bpl">Borland Sample Components</Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dcl31w100.bpl">Delphi 1.0 Compatibility Components</Excluded_Packages>
<Excluded_Packages Name="c:\archivos de programa\borland\delphi10\Bin\dclmid100.bpl">Borland MyBase DataAccess Components</Excluded_Packages>
@ -191,14 +83,14 @@
<DelphiCompile Include="ConCli_FacCli_relation.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\..\Lib\Base.dcp" />
<DCCReference Include="..\..\Lib\Contactos_controller.dcp" />
<DCCReference Include="..\..\Lib\Contactos_model.dcp" />
<DCCReference Include="..\..\Lib\ContratosCliente_controller.dcp" />
<DCCReference Include="..\..\Lib\ContratosCliente_model.dcp" />
<DCCReference Include="..\..\Lib\FacturasCliente_controller.dcp" />
<DCCReference Include="..\..\Lib\FacturasCliente_model.dcp" />
<DCCReference Include="..\..\Lib\PresupuestosCliente_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Base.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Contactos_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\Contactos_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\ContratosCliente_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\FacturasCliente_controller.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\FacturasCliente_model.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\PresupuestosCliente_model.dcp" />
<DCCReference Include="uGenerarFacturasCliUtils.pas">
<Form>dmGenerarFacturasCli</Form>
</DCCReference>

View File

@ -115,8 +115,6 @@ uses
srvContratosCliente_Impl in '..\Modulos\Contratos de cliente\Servidor\srvContratosCliente_Impl.pas' {srvContratosCliente: TDataAbstractService},
uBizContratosClienteServer in '..\Modulos\Contratos de cliente\Model\uBizContratosClienteServer.pas',
uRptContratosCliente_Server in '..\Modulos\Contratos de cliente\Reports\uRptContratosCliente_Server.pas' {RptContratosCliente},
schAlbaranesClienteClient_Intf in '..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteClient_Intf.pas',
schAlbaranesClienteServer_Intf in '..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteServer_Intf.pas',
schAlbaranesProveedorClient_Intf in '..\Modulos\Albaranes de proveedor\Model\schAlbaranesProveedorClient_Intf.pas',
schAlbaranesProveedorServer_Intf in '..\Modulos\Albaranes de proveedor\Model\schAlbaranesProveedorServer_Intf.pas',
schInventarioClient_Intf in '..\Modulos\Inventario\Model\schInventarioClient_Intf.pas',
@ -136,7 +134,9 @@ uses
schPresupuestosClienteClient_Intf in '..\Modulos\Presupuestos de cliente\Model\schPresupuestosClienteClient_Intf.pas',
schPresupuestosClienteServer_Intf in '..\Modulos\Presupuestos de cliente\Model\schPresupuestosClienteServer_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',
schAlbaranesClienteClient_Intf in '..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteClient_Intf.pas',
schAlbaranesClienteServer_Intf in '..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteServer_Intf.pas';
{$R *.res}
{$R ..\Servicios\RODLFile.res}

View File

@ -28,7 +28,7 @@
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">2</VersionInfo><VersionInfo Name="MinorVer">5</VersionInfo><VersionInfo Name="Release">2</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">3082</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName">Rodax Software S.L.</VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">2.5.2.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName">FactuGES (Servidor)</VersionInfoKeys><VersionInfoKeys Name="ProductVersion">2.5.2.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys><VersionInfoKeys Name="CompileDate">martes, 29 de enero de 2013 19:17</VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">2</VersionInfo><VersionInfo Name="MinorVer">5</VersionInfo><VersionInfo Name="Release">3</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">3082</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName">Rodax Software S.L.</VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">2.5.3.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName">FactuGES (Servidor)</VersionInfoKeys><VersionInfoKeys Name="ProductVersion">2.5.3.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys><VersionInfoKeys Name="CompileDate">viernes, 17 de mayo de 2013 12:12</VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<Excluded_Packages Name="C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\dxPScxScheduler2LnkD11.bpl">File C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\dxPScxScheduler2LnkD11.bpl not found</Excluded_Packages>
</Excluded_Packages><Source><Source Name="MainSource">FactuGES_Server.dpr</Source></Source></Delphi.Personality></BorlandProject></BorlandProject>
</ProjectExtensions>

View File

@ -1,7 +1,7 @@
MAINICON ICON "C:\Codigo Acana\Resources\Iconos\Servidor.ico"
1 VERSIONINFO
FILEVERSION 2,5,2,0
PRODUCTVERSION 2,5,2,0
FILEVERSION 2,5,3,0
PRODUCTVERSION 2,5,3,0
FILEFLAGSMASK 0x3FL
FILEFLAGS 0x00L
FILEOS 0x40004L
@ -13,10 +13,10 @@ BEGIN
BLOCK "0C0A04E4"
BEGIN
VALUE "CompanyName", "Rodax Software S.L.\0"
VALUE "FileVersion", "2.5.2.0\0"
VALUE "FileVersion", "2.5.3.0\0"
VALUE "ProductName", "FactuGES (Servidor)\0"
VALUE "ProductVersion", "2.5.2.0\0"
VALUE "CompileDate", "martes, 05 de febrero de 2013 12:54\0"
VALUE "ProductVersion", "2.5.3.0\0"
VALUE "CompileDate", "viernes, 17 de mayo de 2013 14:16\0"
END
END
BLOCK "VarFileInfo"

Binary file not shown.

51
Tools/UPX/BUGS Normal file
View File

@ -0,0 +1,51 @@
ooooo ooo ooooooooo. ooooooo ooooo
`888' `8' `888 `Y88. `8888 d8'
888 8 888 .d88' Y888..8P
888 8 888ooo88P' `8888'
888 8 888 .8PY888.
`88. .8' 888 d8' `888b
`YbodP' o888o o888o o88888o
The Ultimate Packer for eXecutables
Copyright (c) 1996-2013 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
Limitations and other things which are not (yet) supported:
===========================================================
djgpp2/coff
-----------
* all overlays (except Allegro pakfiles) are silently stripped
dos/exe
-------
* normal dos/exes with new exe headers
* max ~24000 relocation records (...should be enough for everyone ;-)
* exe + sys combined images
watcom/le
---------
* 16-bit selector alias fixups
* 16-bit offset relocation for objects larger than 4 KiB
* 16:16 fixups
If you need any of the above (they're very rare), send us an URL of a
test file.
* 16-bit objects are not loaded into DOS memory
* There is still a problem with the wdosx extender: if you compress a
watcom/le file which does NOT contain the wdosx extender, and after this
you bind the wdosx stub to the compressed file, then it will work.
Otherwise it won't.
* unpacked pmwlite compressed programs might not work when compressed
with UPX (this is a bug in pmwunlite)
win32/pe
--------
* writable shared sections (`--force' *may* work)
* certificates in the image
* compressing files which contain a big BSS requires lots of memory
during compression

339
Tools/UPX/COPYING Normal file
View File

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

138
Tools/UPX/LICENSE Normal file
View File

@ -0,0 +1,138 @@
-----BEGIN PGP SIGNED MESSAGE-----
ooooo ooo ooooooooo. ooooooo ooooo
`888' `8' `888 `Y88. `8888 d8'
888 8 888 .d88' Y888..8P
888 8 888ooo88P' `8888'
888 8 888 .8PY888.
`88. .8' 888 d8' `888b
`YbodP' o888o o888o o88888o
The Ultimate Packer for eXecutables
Copyright (c) 1996-2000 Markus Oberhumer & Laszlo Molnar
http://wildsau.idv.uni-linz.ac.at/mfx/upx.html
http://www.nexus.hu/upx
http://upx.tsx.org
PLEASE CAREFULLY READ THIS LICENSE AGREEMENT, ESPECIALLY IF YOU PLAN
TO MODIFY THE UPX SOURCE CODE OR USE A MODIFIED UPX VERSION.
ABSTRACT
========
UPX and UCL are copyrighted software distributed under the terms
of the GNU General Public License (hereinafter the "GPL").
The stub which is imbedded in each UPX compressed program is part
of UPX and UCL, and contains code that is under our copyright. The
terms of the GNU General Public License still apply as compressing
a program is a special form of linking with our stub.
As a special exception we grant the free usage of UPX for all
executables, including commercial programs.
See below for details and restrictions.
COPYRIGHT
=========
UPX and UCL are copyrighted software. All rights remain with the authors.
UPX is Copyright (C) 1996-2000 Markus Franz Xaver Johannes Oberhumer
UPX is Copyright (C) 1996-2000 Laszlo Molnar
UCL is Copyright (C) 1996-2000 Markus Franz Xaver Johannes Oberhumer
GNU GENERAL PUBLIC LICENSE
==========================
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
UPX and UCL are distributed in the hope that they will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
SPECIAL EXCEPTION FOR COMPRESSED EXECUTABLES
============================================
The stub which is imbedded in each UPX compressed program is part
of UPX and UCL, and contains code that is under our copyright. The
terms of the GNU General Public License still apply as compressing
a program is a special form of linking with our stub.
Hereby Markus F.X.J. Oberhumer and Laszlo Molnar grant you special
permission to freely use and distribute all UPX compressed programs
(including commercial ones), subject to the following restrictions:
1. You must compress your program with a completely unmodified UPX
version; either with our precompiled version, or (at your option)
with a self compiled version of the unmodified UPX sources as
distributed by us.
2. This also implies that the UPX stub must be completely unmodfied, i.e.
the stub imbedded in your compressed program must be byte-identical
to the stub that is produced by the official unmodified UPX version.
3. The decompressor and any other code from the stub must exclusively get
used by the unmodified UPX stub for decompressing your program at
program startup. No portion of the stub may get read, copied,
called or otherwise get used or accessed by your program.
ANNOTATIONS
===========
- You can use a modified UPX version or modified UPX stub only for
programs that are compatible with the GNU General Public License.
- We grant you special permission to freely use and distribute all UPX
compressed programs. But any modification of the UPX stub (such as,
but not limited to, removing our copyright string or making your
program non-decompressible) will immediately revoke your right to
use and distribute a UPX compressed program.
- UPX is not a software protection tool; by requiring that you use
the unmodified UPX version for your proprietary programs we
make sure that any user can decompress your program. This protects
both you and your users as nobody can hide malicious code -
any program that cannot be decompressed is highly suspicious
by definition.
- You can integrate all or part of UPX and UCL into projects that
are compatible with the GNU GPL, but obviously you cannot grant
any special exceptions beyond the GPL for our code in your project.
- We want to actively support manufacturers of virus scanners and
similar security software. Please contact us if you would like to
incorporate parts of UPX or UCL into such a product.
Markus F.X.J. Oberhumer Laszlo Molnar
markus.oberhumer@jk.uni-linz.ac.at ml1050@cdata.tvnet.hu
Linz, Austria, 25 Feb 2000
-----BEGIN PGP SIGNATURE-----
Version: 2.6.3ia
Charset: noconv
iQCVAwUBOLaLS210fyLu8beJAQFYVAP/ShzENWKLTvedLCjZbDcwaBEHfUVcrGMI
wE7frMkbWT2zmkdv9hW90WmjMhOBu7yhUplvN8BKOtLiolEnZmLCYu8AGCwr5wBf
dfLoClxnzfTtgQv5axF1awp4RwCUH3hf4cDrOVqmAsWXKPHtm4hx96jF6L4oHhjx
OO03+ojZdO8=
=CS52
-----END PGP SIGNATURE-----

478
Tools/UPX/NEWS Normal file
View File

@ -0,0 +1,478 @@
==================================================================
User visible changes for UPX
==================================================================
Changes in 3.09 (18 Feb 2013):
* New option --preserve-build-id for GNU ELF.
* Allow for code signing and LC_UUID on Mac OS X executables.
* Allow non-contiguous LC_SEGMENTs and 0==.vmsize for Mach-O.
* Allow zero-filled final page in PackUnix::canUnpack().
* bug fixes
Changes in 3.08 (12 Dec 2011):
* Fix allocation in runtime stub for darwin.macho-entry (i386 and amd64).
* Compress shared library on ELF i386 only [ld.so threatens even this case].
* Attempt to support ELF on QNX 6.3.0 for armel (experimental).
* Better diagnostic when ELF -fPIC is needed.
* PT_NOTE improvements for *BSD.
* Preserve more ELF .e_flags on ARM.
* Minor code improvements for ELF stubs.
* Defend against another flavor of corrupt PE header.
* bug fixes
Changes in 3.07 (08 Sep 2010):
* win32/pe: fixed relocation handling for files with *no* TLS callbacks
[severe bug introduced in 3.06]
Changes in 3.06 (04 Sep 2010):
* win32/pe: TLS callback support contributed by Stefan Widmann. Thanks!
* bug fixes
Changes in 3.05 (27 Apr 2010):
* i386-linux and amd64-linux support shared libraries (DT_INIT must
exist, all info needed by runtime loader must be first in .text, etc.)
* Linux /proc/self/exe now is preserved by default, by leaving behind
one page. New compress-time option --unmap-all-pages is available.
* Withdraw support for shared libraries on Darwin (Apple Mac OS X)
because upx does not understand enough about .dylib.
* bug fixes
Changes in 3.04 (27 Sep 2009):
* new format Mach/AMD64 supports 64-bit programs on Apple Macintosh.
* new formats Dylib/i386 and Dylib/ppc32 support shared libraries
[such as browser plugins] on Darwin (Apple Macintosh). An existing
-init function (LC_ROUTINES command) is required.
* new format vmlinuz/armel for Debian NSLU2 (etc.) linux kernel
* bvmlinuz boot protocol 2.08 for 386 Linux kernel
* Extended ABI version 4 for armel-eabi ARM Linux ELF
* bug fixes
Changes in 3.03 (27 Apr 2008):
* implement cache flushing for PowerPC (esp. model 440)
* fix cache flushing on MIPS (>3 MiB compressed, or with holes)
* fix MIPS big-endian
* bug fixes
Changes in 3.02 (16 Dec 2007):
* fix unmapping on arm-linux.elf
* fix error checking in mmap for i386-linux.elf [triggered by -fPIE]
* bug fixes
Changes in 3.01 (31 Jul 2007):
* new options --no-mode, --no-owner and --no-time to disable preservation
of mode (file permissions), file ownership and timestamps.
* dos/exe: fixed an incorrect error message caused by a bug in
relocation handling
* new format linux/mipsel supports ELF on [32-bit] R3000
* fix argv[0] on PowerPC with --lzma
* bug fixes
Changes in 3.00 (27 Apr 2007):
* watcom/le & tmt/adam: fixed a problem when using certain filters
Changes in 2.93 beta (08 Mar 2007):
* new formats Mach/i386 and Mach/fat support Mac OS X i686 and
Universal binaries [i686 and PowerPC only]
* dos/exe: LZMA is now also supported for 16-bit dos/exe. Please note that
you have to explicitly use '--lzma' even for '--ultra-brute' here
because runtime decompression is about 30 times slower than NRV -
which is really noticeable on old machines.
* dos/exe: fixed a rarely occuring bug in relocation handling
* win32/pe & arm/pe: better icon compression handling
Changes in 2.92 beta (23 Jan 2007):
* new option '--ultra-brute' which tries even more variants
* slightly improved compression ratio for some files when
using '--brute' or '--ultra-brute'
* bug fixes
Changes in 2.91 beta (29 Nov 2006):
* assorted bug fixes
* arm/pe: fix "missing" icon & version info resource problem for wince 5
* win32/pe & arm/pe: added option --compress-icons=3 to compress all icons
Changes in 2.90 beta (08 Oct 2006):
* LZMA algorithm support for most of the 32-bit and 64-bit file formats;
use new option '--lzma' to enable
* new format: BSD/elf386 supporting FreeBSD, NetBSD and OpenBSD
via auto-detection of PT_NOTE or EI_OSABI
* arm/pe: all the NRV compression methods are now supported
(only NRV2D is missing in thumb mode)
* linux/elf386, linux/ElfAMD: remember /proc/self/exe in environment
* major source code changes: the runtime decompression stubs are now
built from internal ELF objects
==================================================================
Changes in 2.03 (07 Nov 2006):
* bvmlinuz/386: fix for kernels not at 0x100000; also allow x86_64
* linux/elf386: work around Linux kernel bug (0-length .bss needs PF_W)
Changes in 2.02 (13 Aug 2006):
* linux/386: work around Linux kernel bug (".bss" requires PF_W)
* linux/ppc32, mach/ppc32: compressed programs now work on a 405 CPU
* vmlinuz/386: fixed zlib uncompression problem on DOS
Changes in 2.01 (06 Jun 2006):
* arm/pe: better DLL support
* dos/exe: device driver support added
* linux/386: Fix --force-execve for PaX, grSecurity, and strict SELinux.
/tmp must support execve(); therefore /tmp cannot be mounted 'noexec'.
* win32/pe & arm/pe: added new option '--keep-resource=' for
excluding selected resources from compression
Changes in 2.00 (27 Apr 2006):
* linux/386: the stub now prints an error message if some strict
SELinux mode does prevent runtime decompression and execution
(for a fully SELinux-compatible but otherwise inferior compression
format you can use the '--force-execve' option)
* linux/386: worked around a problem where certain Linux kernels
clobber the %ebx register during a syscall
* win32/pe: disable filters for files with broken PE headers
Changes in 1.96 beta (13 Apr 2006):
* arm/pe: added filter support
* win32/pe: removed an unnecessary check so that Delphi 2006 and
Digital Mars C++ programs finally are supported
Changes in 1.95 beta (09 Apr 2006):
* arm/pe: added DLL support
* arm/pe: added thumb mode stub support
* arm/pe: added unpacking support
* win32/pe: really worked around R6002 runtime errors
Changes in 1.94 beta (11 Mar 2006):
* new format: added support for arm/pe (ARM executables running on WinCE)
* new format: added support for linux elf/amd64
* new format: added support for linux elf/ppc32
* new format: added support for mach/ppc32 (Apple Mac OS X)
* win32/pe: hopefully working "load config" support
* win32/pe: R6002 runtime errors worked around
* win32/pe: the stub now clears the dirty stack
Changes in 1.93 beta (07 Feb 2005):
* vmlinuz/386: fixes to support more kernels
Changes in 1.92 beta (20 Jul 2004):
* win32/pe: added option '--strip-loadconf' to strip the SEH load
config section [NOTE: this option is obsolete since UPX 1.94]
* win32/pe: try to detect .NET (win32/net) files [not yet supported by UPX]
* vmlinux/386: new format that directly supports building Linux kernels
* source code: now compiles cleanly under Win64
Changes in 1.91 beta (30 Jun 2004):
* djgpp2/coff: added support for recent binutils versions
* linux/elf386, linux/sh386: lots of improvements
* vmlinuz/386: added support for recent kernels
* watcom/le: don't crash on files without relocations
* win32/pe: stricter checks of some PE values
* option '--brute' now implies '--crp-ms=999999'.
* source code: much improved portability using ACC, the
Automatic Compiler Configuration
* source code: compile fixes for strict ISO C++ compilers
* source code: compile fixes for Win64
* re-synced with upx 1.25 branch
Changes in 1.90 beta (11 Nov 2002):
* implemented several new options for finer compression control:
'--all-methods', '--all-filters' and '--brute'
* ps1/exe: new format - UPX now supports PlayStation One programs
* linux/386: added the option '--force-execve'
* vmlinuz/386: better kernel detection and sanity checks
* re-synced with upx 1.24 branch
* documentation updates
Changes in 1.11 beta (20 Dec 2000):
* vmlinuz/386: new format - UPX now supports bootable linux kernels
* linux/elf386: added the new ELF direct-to-memory executable format - no
more temp files are needed for decompression!
* linux/sh386: added the new shell direct-to-memory executable format - no
more temp files are needed for decompression!
* reduced overall memory requirements during packing
* quite a number of internal source code rearrangements
==================================================================
Changes in 1.25 (29 Jun 2004)
* INFO: http://upx.sourceforge.net is the permanent UPX home page
* watcom/le: don't crash on files without relocations
* win32/pe: stricter checks of some PE values
* source code: much improved portability using ACC, the
Automatic Compiler Configuration
* source code: compile fixes for strict ISO C++ compilers
* source code: compile fixes for Win64
Changes in 1.24 (07 Nov 2002)
* djgpp2/coff: stricter check of the COFF header to work around a
problem with certain binutils versions
Changes in 1.23 (05 Sep 2002)
* atari/tos: fixed an unpacking problem where a buffer was too
small (introduced in 1.22)
* linux/386: don't give up too early if a single block turns out
to be incompressible
* documentation: added some quick tips how to achieve the best
compression ratio for the final release of your application
* fixed a rare situation where the exit code was not set correctly
Changes in 1.22 (27 Jun 2002)
* atari/tos: the stub now flushes the CPU cache to avoid
problems on 68030+ machines
* source code: additional compiler support for Borland C++,
Digital Mars C++ and Watcom C++
Changes in 1.21 (01 Jun 2002)
* New option '--crp-ms=' for slightly better compression at the cost
of higher memory requirements during compression.
Try 'upx --best --crp-ms=100000'. See the docs for more info.
* source code: portability fixes
* source code: compile fixes for g++ 3.0 and g++ 3.1
Changes in 1.20 (23 May 2001)
* slightly faster compression
* work around a gcc problem in the latest djgpp2 distribution
* watcom/le: fixed detection of already compressed files
* win32/pe: do not compress RT_MANIFEST resource types
* win32/pe: improved the error message for empty resource sections
* [NOTE: the jump from 1.08 to 1.20 is to avoid confusion with
our unstable development releases 1.1x and 1.9x]
Changes in 1.08 (30 Apr 2001)
* new native port to atari/tos
* win32/pe: shortened the identstring
* source code: portability fixes - UPX now builds cleanly under m68k CPUs
Changes in 1.07 (20 Feb 2001)
* win32/pe: corrected the TLS callback check
* win32/pe: really fixed that rare bug in relocation handling
* win32/pe: experimental support for SizeOfHeaders > 0x1000
* win32/pe: check for superfluous data between sections
* win32/pe: compressing screensavers (.scr) should finally work
Changes in 1.06 (27 Jan 2001)
* win32/pe: the check for TLS callbacks introduced in 1.05
was too strict - disabled for now
* dos/com: decreased the decompressor stack size a little bit
Changes in 1.05 (24 Jan 2001)
* win32/pe: refuse to compress programs with TLS callbacks
* win32/pe: stub changes to avoid slowdowns with some virus monitors
* win32/pe: reverted the relocation handling changes in 1.04
* linux/386: dont try to compress Linux kernel images (have a look
at the unstable UPX 1.1x beta versions for that)
Changes in 1.04 (19 Dec 2000)
* dos/exe: fixed an internal error when using '--no-reloc'
* win32/pe: fixed a rare bug in the relocation handling code
* some tunings for the default compression level
Changes in 1.03 (30 Nov 2000)
* linked with a new version of the NRV compression library:
- improved compression ratio a little bit
- overall significantly faster compression
- much faster when using high compression levels like '-9' or '--best'
- much faster with large files
* atari/tos: added support for FreeMiNT
* the 32-bit DOS version now uses the new CWSDSTUB extender
Changes in 1.02 (13 Sep 2000)
* watcom/le: fixed a problem with the Causeway extender
* win32/pe: don't automatically strip relocs if they seem needed
* support multiple backup generations when using '-k'
* updated the console screen driver
Changes in 1.01 (09 Apr 2000)
* win32/pe: fixed an uncompression problem in DLLs with empty
fixup sections
* win32/pe: fixed another rare uncompression problem - a field in the
PE header was set incorrectly
Changes in 1.00 (26 Mar 2000)
* documentation updates
* watcom/le: do not duplicate the non-resident name table
* win32/pe: fixed an import handling problem: sometimes too much data
could be deleted from a file -> the uncompressed file would not work
anymore
Changes in 0.99.3 (07 Mar 2000)
* win32/pe: fixed a rare problem in the stub string handling part
Changes in 0.99.2 (02 Mar 2000)
* dos/exe: fixed a typo causing an internal error (introduced in 0.99.1)
Changes in 0.99.1 (29 Feb 2000)
* win32/pe: fixed some object alignments which were causing
problems when loading compressed DLLs under Windows NT/2000
Changes in 0.99 (25 Feb 2000)
* FULL SOURCE CODE RELEASED UNDER THE TERMS OF THE GNU GPL
* win32/pe: changed default to '--strip-relocs=1'
* dos/com and dos/sys: fixed a bad decompressor problem
* linux/386: the counter for the progress indicator was off by one
Changes in 0.94 (06 Dec 1999)
* win32/pe: the stub now calls ExitProcess in case of import errors
* under DOS and Windows, the environment variable UPX now accepts
a '#' as replacement for '=' because of a COMMAND.COM limitation
Changes in 0.93 (22 Nov 1999)
* win32/pe: fixed --strip-relocs problem with uncompression
* win32/pe: fixed a bug which could produce a broken decompressor stub
* linux/386: yet another FreeBSD compatibility fix
Changes in 0.92 (14 Nov 1999)
* win32/pe: really fixed that one line (see below)
Changes in 0.91 (13 Nov 1999)
* win32/pe: an important one-line fix for the newly introduced problems
* dos/com and dos/sys: fixed an internal error
* dos/exe: correctly restore cs when uncompressing
Changes in 0.90 (10 Nov 1999)
* all formats: '--overlay=copy' now is the default overlay mode
* improved compression ratio for most files
* win32/pe: uncompression is finally supported
* win32/pe: never compress REGISTRY resources
* win32/pe: headersize was not set in PE header
* win32/pe: resource handling is rewritten
* win32/pe: the last :-) TLS problem is fixed
* win32/pe: somewhat less memory is required during compression
* linux/386: fixed compression of scripts which was broken since 0.71
* linux/386: more FreeBSD compatibility issues
* changed option: '-i' now prints some more details during compression
(not finished yet)
Changes in 0.84 (04 Oct 1999)
* dos/exe: fixed a rare problem where the decompressor could crash
* some other minor fixes
Changes in 0.83 (17 Sep 1999)
* dos/exe: fixed minimal memory requirement problem for some files
* win32/pe: fixed a bug which caused a crash in some compressed files
* linux/386: various improvements in the stub; also, for the sake
of FreeBSD users, the stub is now branded as Linux/ELF
Changes in 0.82 (16 Aug 1999)
* dos/exe: fixed a decompressor bug which could cause crash on some files
* linux/386: section headers are now stripped from the stub so that
'strip' won't ruin a compressed file any longer
* wc/le: support for stack not in the last object disabled again
* win32/pe: removed some unneeded data
Changes in 0.81 (04 Aug 1999)
* win32/pe: fixed an important bug in import handling
* dos/com: fixed an internal error that could happen with very small files
Changes in 0.80 (03 Aug 1999)
* you can set some default options in the environment var 'UPX'
* dos/com: the decompressor stub now checks for enough free memory
* dos/exe: decompressor rewritten, some bugs are fixed
* dos/exe: new option '--no-reloc': no relocation data is put into
the DOS header
* tmt/adam: added support for more stubs, detect already packed files
* tmt/adam: new option '--copy-overlay'
* wc/le: reduced memory requirement during uncompression
* wc/le: support files which do not contain their stack in the last object
* wc/le: fixed a bug which could cause a crash, improved relocation
handling
* wc/le: new option '--copy-overlay'
* win32/pe: '--compress-icons=2' is now the default
* win32/pe: even better TLS support
* win32/pe: versioninfo works on NT
* win32/pe: import by ordinal from kernel32.dll works
* win32/pe: other import improvements: importing a nonexistent DLL
results in a usual Windows message, importing a nonexistent function
results in program exit (instead of crash ;-)
* win32/pe: new option: '--compress-resources=0'
* win32/pe: reduced memory requirement during uncompression, some
files might even require LESS memory when they're compressed
* win32/pe: TYPELIBs should work now
* win32/pe: improved relocation handling, 16-bit relocations should work
* win32/pe: new option '--strip-relocs' (only if you know what you are doing)
* win32/pe: new option '--copy-overlay'
* important internal changes: now the stubs are built at runtime
Changes in 0.72 (12 May 1999)
* tmt/adam: fixed a serious problem in the decompressor stub; all
compressed tmt files should be recompressed
* win32/pe: fixed the 'shared sections not supported' warning:
read-only shared sections are fine
* win32/pe: never compress TYPELIB resources
* win32/pe: compressed files are hopefully less suspicious to heuristic
virus scanners now
* linux/386: minor decompressor stub updates, nicer progress bar
Changes in 0.71 (19 Apr 1999)
* dos/exe: added option '--no-overlay'
* linux/386: various improvements in the stub, most notably the
overhead for an extra cleanup process has been removed
* win32/pe: added support for export forwarders
* win32/pe: added support for DLLs without entry point or imports
* win32/pe: yet another .bss fix
* win32/pe: new option '--compress-icons=2': compress all icons
which are not in the first icon directory
* win32/pe: rearranged stub to avoid false alerts from some virus scanners
Changes in 0.70 (30 Mar 1999)
* added support for linux/386 executables
* improved compression ratio quite a bit
* added new compression level '--best' to squeeze out even some more bytes
* win32/pe: TLS support is much better now
* win32/pe: --compress-icons=0 should now work as well
* the usual minor fixes for win32/pe
Changes in 0.62 (16 Mar 1999)
* win32/pe: --compress-icons and --compress-exports are on now by default
* win32/pe: --compress-icons should really work now
* win32/pe: fixed a problem with embedded .bss sections
Changes in 0.61 (08 Mar 1999)
* atari/tos: fixed a problem where the bss segment could become too small
Changes in 0.60 (06 Mar 1999)
* win32/pe: fixed file corruption when the size of the export data is invalid
* win32/pe: fixed a problem with empty resource data
* win32/pe: compressed file alignment set to minimum value
* win32/pe: made all compressed sections writable
* fixed some other win32/pe bugs
* fixed an address optimization problem for some not Watcom LE files
* fixed a bug which could make UPX hang when an exe header contained
an illegal value
* added some compression flags for the win32/pe format
* added support for Atari ST/TT executables (atari/tos)
* improved compression ratio
* improved compression speed
Changes in 0.51 (14 Jan 1999)
* fixed a small bug in the PE header that would prevent some compressed
win32/pe executables from running under Windows NT and WINE
Changes in 0.50 (03 Jan 1999)
* added support for PE format executables (win32/pe & rtm32/pe)
* added support for TMT executables (tmt/adam)
* fixed a dos/sys bug that affected OpenDOS
Changes in 0.40 (05 Oct 1998)
* improved compression ratio
* fixed a small but fatal bug in dos/sys introduced in 0.30
* fixed a rare bug in dos/exe
* worked around a bug in djgpp's strip 2.8
* djgpp/coff: Allegro packfile support should work now
* added dos/exeh compression method (works on 386+)
Changes in 0.30 (27 Jul 1998)
* fixed a serious bug in the 32-bit compressors - please don't use
djgpp/coff and watcom/le compressed files from previous versions,
some of them are possibly damaged !
* the 16-bit uncompressors are a little bit shorter & faster
* fixed progress indicator for VESA and SVGA text modes
Changes in 0.20 (05 Jul 1998)
* second public beta release
* too many changes to list here
Changes in 0.05 (26 May 1998)
* first public beta release
# vim:set syntax=off tw=0 ts=4 sw=4 et: -*- coding: utf-8 -*-

142
Tools/UPX/README Normal file
View File

@ -0,0 +1,142 @@
ooooo ooo ooooooooo. ooooooo ooooo
`888' `8' `888 `Y88. `8888 d8'
888 8 888 .d88' Y888..8P
888 8 888ooo88P' `8888'
888 8 888 .8PY888.
`88. .8' 888 d8' `888b
`YbodP' o888o o888o o88888o
The Ultimate Packer for eXecutables
Copyright (c) 1996-2013 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
WELCOME
=======
Welcome to UPX !
Please don't forget to read the file LICENSE - UPX is distributed
under the GNU General Public License (GPL) with special exceptions
allowing the distribution of all compressed executables, including
commercial programs.
INTRODUCTION
============
UPX is an advanced executable file compressor. UPX will typically
reduce the file size of programs and DLLs by around 50%-70%, thus
reducing disk space, network load times, download times and
other distribution and storage costs.
Programs and libraries compressed by UPX are completely self-contained
and run exactly as before, with no runtime or memory penalty for most
of the supported formats.
UPX supports a number of different executable formats, including
Windows 95/98/ME/NT/2000/XP/CE programs and DLLs, DOS programs,
and Linux executables and kernels.
UPX is free software distributed under the term of the GNU General
Public License. Full source code is available.
UPX may be distributed and used freely, even with commercial applications.
See the UPX License Agreement for details.
UPX is rated number one in the well known Archive Comparison Test. Visit
http://compression.ca/ .
UPX aims to be Commercial Quality Freeware.
SHORT DOCUMENTATION
===================
'upx program.exe' will compress a program or DLL. For best compression
results try 'upx --brute program.exe'.
Please see the file UPX.DOC for the full documentation. The files
NEWS and BUGS also contain various tidbits of information.
DISCLAIMER
==========
UPX comes with ABSOLUTELY NO WARRANTY; for details see the file LICENSE.
Having said that, we think that UPX is quite stable now. Indeed we
have compressed lots of files without any problems. Also, the
current version has undergone several months of beta testing -
actually it's almost 8 years since our first public beta.
This is the first production quality release, and we plan that future
releases will be backward compatible with this version.
Please report all problems or suggestions to the authors. Thanks.
THE FUTURE
==========
- We'd really love to support handheld systems like the PalmPilot because
compression makes a lot of sense here. And - because of the atari/tos
format - we already have a working decompressor in 68000 assembly.
Unfortunately we know next to nothing about the operating system
architecture of such handhelds, so we need some information from
an expert. Please contact us if you think you can help.
- The Linux approach could probably get ported to a lot of other Unix
variants, at least for other i386 architectures it shouldn't be too
much work. If someone sends me a fresh hard disk and an official
FreeBSD/OpenBSD/NetBSD/Solaris/BeOS... CD I might take a look at it ;-)
- We will *NOT* add any sort of protection and/or encryption.
This only gives people a false feeling of security because
by definition all protectors/compressors can be broken.
And don't trust any advertisement of authors of other executable
compressors about this topic - just do a websearch on "unpackers"...
- Fix all remaining bugs - keep your reports coming ;-)
- See the file PROJECTS in the source code distribution if you want
to contribute.
COPYRIGHT
=========
Copyright (C) 1996-2013 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2013 Laszlo Molnar
Copyright (C) 2000-2013 John F. Reiser
This program may be used freely, and you are welcome to
redistribute it under certain conditions.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
UPX License Agreement for more details.
You should have received a copy of the UPX License Agreement along
with this program; see the file LICENSE. If not, visit the UPX home page.
Share and enjoy,
Markus & Laszlo
Markus F.X.J. Oberhumer Laszlo Molnar
<markus@oberhumer.com> <ml1050@users.sourceforge.net>
[ The term UPX is a shorthand for the Ultimate Packer for eXecutables
and holds no connection with potential owners of registered trademarks
or other rights. ]
[ Feel free to contact us if you have commercial compression requirements
or interesting job offers. ]

23
Tools/UPX/README.1ST Normal file
View File

@ -0,0 +1,23 @@
ooooo ooo ooooooooo. ooooooo ooooo
`888' `8' `888 `Y88. `8888 d8'
888 8 888 .d88' Y888..8P
888 8 888ooo88P' `8888'
888 8 888 .8PY888.
`88. .8' 888 d8' `888b
`YbodP' o888o o888o o88888o
The Ultimate Packer for eXecutables
Copyright (c) 1996-2013 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
MAJOR NEWS IN UPX 3
===================
The main news since UPX 2 are:
* new format: added support for linux elf/arm
* better compression using the LZMA algorithm (option '--lzma')

61
Tools/UPX/THANKS Normal file
View File

@ -0,0 +1,61 @@
ooooo ooo ooooooooo. ooooooo ooooo
`888' `8' `888 `Y88. `8888 d8'
888 8 888 .d88' Y888..8P
888 8 888ooo88P' `8888'
888 8 888 .8PY888.
`88. .8' 888 d8' `888b
`YbodP' o888o o888o o88888o
The Ultimate Packer for eXecutables
Copyright (c) 1996-2013 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
.___.. .
| |_ _.._ ;_/ __
| [ )(_][ )| \_)
--------------------
UPX would not be what it is today without the invaluable help of
everybody who was kind enough to spend time testing it, using it
in applications and reporting bugs.
The following people made especially gracious contributions of their
time and energy in helping to track down bugs, add new features, and
generally assist in the UPX maintainership process:
Adam Ierymenko <api@one.net>
for severals ideas for the Linux version
Andi Kleen <ak@muc.de> and Jamie Lokier <nospam@cern.ch>
for the /proc/self/fd/X and other Linux suggestions
Andreas Muegge <andreas.muegge@gmx.de>
for the Win32 GUI
Atli Mar Gudmundsson <agudmundsson@symantec.com>
for several comments on the win32/pe stub
Charles W. Sandmann <sandmann@clio.rice.edu>
for the idea with the stubless decompressor in djgpp2/coff
Ice
for debugging the PE headersize problem down
Joergen Ibsen <jibz@hotmail.com> and d'b
for the relocation & address optimization ideas
John S. Fine <johnfine@erols.com>
for the new version of the dos/exe decompressor
Lukundoo <Lukundoo@softhome.net>
for beta testing
Michael Devore
for initial dos/exe device driver support
Oleg V. Volkov <rover@lglobus.ru>
for various FreeBSD specific informations
The Owl & G-RoM
for the --compress-icons fix
Ralph Roth <RalphRoth@gmx.net>
for reporting several bugs
Salvador Eduardo Tropea
for beta testing
Stefan Widmann
for the win32/pe TLS callback support
The WINE project (http://www.winehq.com/)
for lots of useful information found in their PE loader sources
Natascha

114
Tools/UPX/TODO Normal file
View File

@ -0,0 +1,114 @@
UPX TODO list. Last updated 2006-12-08.
IMPORTANT PROBLEMS THAT SHOULD BE FIXED SOON:
- [None]
OTHER:
- docs: convert docs from upx.pod to use AsciiDoc
- check all <const_cast> to make sure they are not invalid
- throwNotCompressible() is not a real error, so make the output nicer
(info: bla bla). Also ui.cpp (total_*).
-----------------------------------------------------------------------
IMPROVED COMPRESSION RATIO
==========================
- experiment with new filters
- implement filters for dos/exe
- filters: could we exploit a f->firstcall info field ?
- for small programs (e.g. < 64k), try an additional algorithm
to see if it gives better compression
ALL FORMATS
===========
- more thoroughly test the exe-header in canPack()
and throw exceptions when encountering bad values.
- implement `--cpu=486' option to use bswap on the 32-bit formats
(if cpu >= 486)
FORMAT DJGPP2/COFF
==================
- handle overlays
- fix default file extension handling when the --coff option is set
FORMAT DOS/EXE
==============
- implement filters
- add a check so that we don't pack djgpp1 binaries
FORMAT LINUX/386
================
- don't mmap() the temporary output file - this seems to improve
file io speed
FORMAT TMT/ADAM
===============
- the decompressors are already aligned, no need for an
extra alignment
FORMAT WATCOM/LE
================
- handle files without relocations
- the decompressors are already aligned, no need for an
extra alignment
- fix default file extension handling when the --le option is set
- handle holes in the file
FORMAT WIN16/NE
===============
- implement readFileHeader() to correctly identify a win16/ne
executable, so that the call for contribution will get thrown
FORMAT WIN32/PE
===============
- fix the section alignment with the Intel compiler
- decrease runtime memory overhead
3 - difficult) don't compress the BSS section and other holes.
4 - medium - ml) fix when objectalign < 0x1000
4 - easy - ml) put the original offset of moved resources somewhere into
the res.dir. (if it's safe to do)
4 - ??? - ml) fix FIXMEs
5 - medium - ml) try to put the preprocessed imports & relocs back to their
original section if possible. this could save some virtual memory
address space.

1036
Tools/UPX/upx.1 Normal file

File diff suppressed because it is too large Load Diff

843
Tools/UPX/upx.doc Normal file
View File

@ -0,0 +1,843 @@
NAME
upx - compress or expand executable files
SYNOPSIS
upx [ *command* ] [ *options* ] *filename*...
ABSTRACT
The Ultimate Packer for eXecutables
Copyright (c) 1996-2013 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
UPX is a portable, extendable, high-performance executable packer for
several different executable formats. It achieves an excellent
compression ratio and offers **very** fast decompression. Your
executables suffer no memory overhead or other drawbacks for most of the
formats supported, because of in-place decompression.
While you may use UPX freely for both non-commercial and commercial
executables (for details see the file LICENSE), we would highly
appreciate if you credit UPX and ourselves in the documentation,
possibly including a reference to the UPX home page. Thanks.
[ Using UPX in non-OpenSource applications without proper credits is
considered not politically correct ;-) ]
DISCLAIMER
UPX comes with ABSOLUTELY NO WARRANTY; for details see the file LICENSE.
This is the first production quality release, and we plan that future
1.xx releases will be backward compatible with this version.
Please report all problems or suggestions to the authors. Thanks.
DESCRIPTION
UPX is a versatile executable packer with the following features:
- excellent compression ratio: compresses better than zip/gzip,
use UPX to decrease the size of your distribution !
- very fast decompression: about 10 MiB/sec on an ancient Pentium 133,
about 200 MiB/sec on an Athlon XP 2000+.
- no memory overhead for your compressed executables for most of the
supported formats
- safe: you can list, test and unpack your executables
Also, a checksum of both the compressed and uncompressed file is
maintained internally.
- universal: UPX can pack a number of executable formats:
* atari/tos
* bvmlinuz/386 [bootable Linux kernel]
* djgpp2/coff
* dos/com
* dos/exe
* dos/sys
* linux/386
* linux/elf386
* linux/sh386
* ps1/exe
* rtm32/pe
* tmt/adam
* vmlinuz/386 [bootable Linux kernel]
* vmlinux/386
* watcom/le (supporting DOS4G, PMODE/W, DOS32a and CauseWay)
* win32/pe (exe and dll)
* arm/pe (exe and dll)
* linux/elfamd64
* linux/elfppc32
* mach/elfppc32
- portable: UPX is written in portable endian-neutral C++
- extendable: because of the class layout it's very easy to support
new executable formats or add new compression algorithms
- free: UPX can be distributed and used freely. And from version 0.99
the full source code of UPX is released under the GNU General Public
License (GPL) !
You probably understand now why we call UPX the "*ultimate*" executable
packer.
COMMANDS
Compress
This is the default operation, eg. upx yourfile.exe will compress the
file specified on the command line.
Decompress
All UPX supported file formats can be unpacked using the -d switch, eg.
upx -d yourfile.exe will uncompress the file you've just compressed.
Test
The -t command tests the integrity of the compressed and uncompressed
data, eg. upx -t yourfile.exe check whether your file can be safely
decompressed. Note, that this command doesn't check the whole file, only
the part that will be uncompressed during program execution. This means
that you should not use this command instead of a virus checker.
List
The -l command prints out some information about the compressed files
specified on the command line as parameters, eg upx -l yourfile.exe
shows the compressed / uncompressed size and the compression ratio of
*yourfile.exe*.
OPTIONS
-q: be quiet, suppress warnings
-q -q (or -qq): be very quiet, suppress errors
-q -q -q (or -qqq): produce no output at all
--help: prints the help
--version: print the version of UPX
--exact: when compressing, require to be able to get a byte-identical
file after decompression with option -d. [NOTE: this is work in progress
and is not supported for all formats yet. If you do care, as a
workaround you can compress and then decompress your program a first
time - any further compress-decompress steps should then yield
byte-identical results as compared to the first decompressed version.]
[ ...to be written... - type `upx --help' for now ]
COMPRESSION LEVELS & TUNING
UPX offers ten different compression levels from -1 to -9, and --best.
The default compression level is -8 for files smaller than 512 KiB, and
-7 otherwise.
* Compression levels 1, 2 and 3 are pretty fast.
* Compression levels 4, 5 and 6 achieve a good time/ratio performance.
* Compression levels 7, 8 and 9 favor compression ratio over speed.
* Compression level --best may take a long time.
Note that compression level --best can be somewhat slow for large files,
but you definitely should use it when releasing a final version of your
program.
Quick info for achieving the best compression ratio:
* Try upx --brute myfile.exe or even upx --ultra-brute myfile.exe.
* Try if --overlay=strip works.
* For win32/pe programs there's --strip-relocs=0. See notes below.
OVERLAY HANDLING OPTIONS
Info: An "overlay" means auxiliary data attached after the logical end
of an executable, and it often contains application specific data (this
is a common practice to avoid an extra data file, though it would be
better to use resource sections).
UPX handles overlays like many other executable packers do: it simply
copies the overlay after the compressed image. This works with some
files, but doesn't work with others, depending on how an application
actually accesses this overlayed data.
--overlay=copy Copy any extra data attached to the file. [DEFAULT]
--overlay=strip Strip any overlay from the program instead of
copying it. Be warned, this may make the compressed
program crash or otherwise unusable.
--overlay=skip Refuse to compress any program which has an overlay.
ENVIRONMENT
The environment variable UPX can hold a set of default options for UPX.
These options are interpreted first and can be overwritten by explicit
command line parameters. For example:
for DOS/Windows: set UPX=-9 --compress-icons#0
for sh/ksh/zsh: UPX="-9 --compress-icons=0"; export UPX
for csh/tcsh: setenv UPX "-9 --compress-icons=0"
Under DOS/Windows you must use '#' instead of '=' when setting the
environment variable because of a COMMAND.COM limitation.
Not all of the options are valid in the environment variable - UPX will
tell you.
You can explicitly use the --no-env option to ignore the environment
variable.
NOTES FOR THE SUPPORTED EXECUTABLE FORMATS
NOTES FOR ATARI/TOS
This is the executable format used by the Atari ST/TT, a Motorola 68000
based personal computer which was popular in the late '80s. Support of
this format is only because of nostalgic feelings of one of the authors
and serves no practical purpose :-). See http://www.freemint.de for more
info.
Packed programs will be byte-identical to the original after
uncompression. All debug information will be stripped, though.
Extra options available for this executable format:
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.
NOTES FOR BVMLINUZ/I386
Same as vmlinuz/i386.
NOTES FOR DOS/COM
Obviously UPX won't work with executables that want to read data from
themselves (like some commandline utilities that ship with Win95/98/ME).
Compressed programs only work on a 286+.
Packed programs will be byte-identical to the original after
uncompression.
Maximum uncompressed size: ~65100 bytes.
Extra options available for this executable format:
--8086 Create an executable that works on any 8086 CPU.
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.
NOTES FOR DOS/EXE
dos/exe stands for all "normal" 16-bit DOS executables.
Obviously UPX won't work with executables that want to read data from
themselves (like some command line utilities that ship with
Win95/98/ME).
Compressed programs only work on a 286+.
Extra options available for this executable format:
--8086 Create an executable that works on any 8086 CPU.
--no-reloc Use no relocation records in the exe header.
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.
NOTES FOR DOS/SYS
Compressed programs only work on a 286+.
Packed programs will be byte-identical to the original after
uncompression.
Maximum uncompressed size: ~65350 bytes.
Extra options available for this executable format:
--8086 Create an executable that works on any 8086 CPU.
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.
NOTES FOR DJGPP2/COFF
First of all, it is recommended to use UPX *instead* of strip. strip has
the very bad habit of replacing your stub with its own (outdated)
version. Additionally UPX corrects a bug/feature in strip v2.8.x: it
will fix the 4 KiB alignment of the stub.
UPX includes the full functionality of stubify. This means it will
automatically stubify your COFF files. Use the option --coff to disable
this functionality (see below).
UPX automatically handles Allegro packfiles.
The DLM format (a rather exotic shared library extension) is not
supported.
Packed programs will be byte-identical to the original after
uncompression. All debug information and trailing garbage will be
stripped, though.
Extra options available for this executable format:
--coff Produce COFF output instead of EXE. By default
UPX keeps your current stub.
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.
NOTES FOR LINUX [general]
Introduction
Linux/386 support in UPX consists of 3 different executable formats,
one optimized for ELF executables ("linux/elf386"), one optimized
for shell scripts ("linux/sh386"), and one generic format
("linux/386").
We will start with a general discussion first, but please
also read the relevant docs for each of the individual formats.
Also, there is special support for bootable kernels - see the
description of the vmlinuz/386 format.
General user's overview
Running a compressed executable program trades less space on a
``permanent'' storage medium (such as a hard disk, floppy disk,
CD-ROM, flash memory, EPROM, etc.) for more space in one or more
``temporary'' storage media (such as RAM, swap space, /tmp, etc.).
Running a compressed executable also requires some additional CPU
cycles to generate the compressed executable in the first place,
and to decompress it at each invocation.
How much space is traded? It depends on the executable, but many
programs save 30% to 50% of permanent disk space. How much CPU
overhead is there? Again, it depends on the executable, but
decompression speed generally is at least many megabytes per second,
and frequently is limited by the speed of the underlying disk
or network I/O.
Depending on the statistics of usage and access, and the relative
speeds of CPU, RAM, swap space, /tmp, and file system storage, then
invoking and running a compressed executable can be faster than
directly running the corresponding uncompressed program.
The operating system might perform fewer expensive I/O operations
to invoke the compressed program. Paging to or from swap space
or /tmp might be faster than paging from the general file system.
``Medium-sized'' programs which access about 1/3 to 1/2 of their
stored program bytes can do particularly well with compression.
Small programs tend not to benefit as much because the absolute
savings is less. Big programs tend not to benefit proportionally
because each invocation may use only a small fraction of the program,
yet UPX decompresses the entire program before invoking it.
But in environments where disk or flash memory storage is limited,
then compression may win anyway.
Currently, executables compressed by UPX do not share RAM at runtime
in the way that executables mapped from a file system do. As a
result, if the same program is run simultaneously by more than one
process, then using the compressed version will require more RAM and/or
swap space. So, shell programs (bash, csh, etc.) and ``make''
might not be good candidates for compression.
UPX recognizes three executable formats for Linux: Linux/elf386,
Linux/sh386, and Linux/386. Linux/386 is the most generic format;
it accommodates any file that can be executed. At runtime, the UPX
decompression stub re-creates in /tmp a copy of the original file,
and then the copy is (re-)executed with the same arguments.
ELF binary executables prefer the Linux/elf386 format by default,
because UPX decompresses them directly into RAM, uses only one
exec, does not use space in /tmp, and does not use /proc.
Shell scripts where the underlying shell accepts a ``-c'' argument
can use the Linux/sh386 format. UPX decompresses the shell script
into low memory, then maps the shell and passes the entire text of the
script as an argument with a leading ``-c''.
General benefits:
- UPX can compress all executables, be it AOUT, ELF, libc4, libc5,
libc6, Shell/Perl/Python/... scripts, standalone Java .class
binaries, or whatever...
All scripts and programs will work just as before.
- Compressed programs are completely self-contained. No need for
any external program.
- UPX keeps your original program untouched. This means that
after decompression you will have a byte-identical version,
and you can use UPX as a file compressor just like gzip.
[ Note that UPX maintains a checksum of the file internally,
so it is indeed a reliable alternative. ]
- As the stub only uses syscalls and isn't linked against libc it
should run under any Linux configuration that can run ELF
binaries.
- For the same reason compressed executables should run under
FreeBSD and other systems which can run Linux binaries.
[ Please send feedback on this topic ]
General drawbacks:
- It is not advisable to compress programs which usually have many
instances running (like `sh' or `make') because the common segments of
compressed programs won't be shared any longer between different
processes.
- `ldd' and `size' won't show anything useful because all they
see is the statically linked stub. Since version 0.82 the section
headers are stripped from the UPX stub and `size' doesn't even
recognize the file format. The file patches/patch-elfcode.h has a
patch to fix this bug in `size' and other programs which use GNU BFD.
General notes:
- As UPX leaves your original program untouched it is advantageous
to strip it before compression.
- If you compress a script you will lose platform independence -
this could be a problem if you are using NFS mounted disks.
- Compression of suid, guid and sticky-bit programs is rejected
because of possible security implications.
- For the same reason there is no sense in making any compressed
program suid.
- Obviously UPX won't work with executables that want to read data
from themselves. E.g., this might be a problem for Perl scripts
which access their __DATA__ lines.
- In case of internal errors the stub will abort with exitcode 127.
Typical reasons for this to happen are that the program has somehow
been modified after compression.
Running `strace -o strace.log compressed_file' will tell you more.
NOTES FOR LINUX/ELF386
Please read the general Linux description first.
The linux/elf386 format decompresses directly into RAM, uses only one
exec, does not use space in /tmp, and does not use /proc.
Linux/elf386 is automatically selected for Linux ELF executables.
Packed programs will be byte-identical to the original after
uncompression.
How it works:
For ELF executables, UPX decompresses directly to memory, simulating
the mapping that the operating system kernel uses during exec(),
including the PT_INTERP program interpreter (if any).
The brk() is set by a special PT_LOAD segment in the compressed
executable itself. UPX then wipes the stack clean except for
arguments, environment variables, and Elf_auxv entries (this is
required by bugs in the startup code of /lib/ld-linux.so as of
May 2000), and transfers control to the program interpreter or
the e_entry address of the original executable.
The UPX stub is about 1700 bytes long, partly written in assembler
and only uses kernel syscalls. It is not linked against any libc.
Specific drawbacks:
- For linux/elf386 and linux/sh386 formats, you will be relying on
RAM and swap space to hold all of the decompressed program during
the lifetime of the process. If you already use most of your swap
space, then you may run out. A system that is "out of memory"
can become fragile. Many programs do not react gracefully when
malloc() returns 0. With newer Linux kernels, the kernel
may decide to kill some processes to regain memory, and you
may not like the kernel's choice of which to kill. Running
/usr/bin/top is one way to check on the usage of swap space.
Extra options available for this executable format:
(none)
NOTES FOR LINUX/SH386
Please read the general Linux description first.
Shell scripts where the underling shell accepts a ``-c'' argument can
use the Linux/sh386 format. UPX decompresses the shell script into low
memory, then maps the shell and passes the entire text of the script as
an argument with a leading ``-c''. It does not use space in /tmp, and
does not use /proc.
Linux/sh386 is automatically selected for shell scripts that use a known
shell.
Packed programs will be byte-identical to the original after
uncompression.
How it works:
For shell script executables (files beginning with "#!/" or "#! /")
where the shell is known to accept "-c <command>", UPX decompresses
the file into low memory, then maps the shell (and its PT_INTERP),
and passes control to the shell with the entire decompressed file
as the argument after "-c". Known shells are sh, ash, bash, bsh, csh,
ksh, tcsh, pdksh. Restriction: UPX cannot use this method
for shell scripts which use the one optional string argument after
the shell name in the script (example: "#! /bin/sh option3\n".)
The UPX stub is about 1700 bytes long, partly written in assembler
and only uses kernel syscalls. It is not linked against any libc.
Specific drawbacks:
- For linux/elf386 and linux/sh386 formats, you will be relying on
RAM and swap space to hold all of the decompressed program during
the lifetime of the process. If you already use most of your swap
space, then you may run out. A system that is "out of memory"
can become fragile. Many programs do not react gracefully when
malloc() returns 0. With newer Linux kernels, the kernel
may decide to kill some processes to regain memory, and you
may not like the kernel's choice of which to kill. Running
/usr/bin/top is one way to check on the usage of swap space.
Extra options available for this executable format:
(none)
NOTES FOR LINUX/386
Please read the general Linux description first.
The generic linux/386 format decompresses to /tmp and needs /proc file
system support. It starts the decompressed program via the execve()
syscall.
Linux/386 is only selected if the specialized linux/elf386 and
linux/sh386 won't recognize a file.
Packed programs will be byte-identical to the original after
uncompression.
How it works:
For files which are not ELF and not a script for a known "-c" shell,
UPX uses kernel execve(), which first requires decompressing to a
temporary file in the file system. Interestingly -
because of the good memory management of the Linux kernel - this
often does not introduce a noticeable delay, and in fact there
will be no disk access at all if you have enough free memory as
the entire process takes places within the file system buffers.
A compressed executable consists of the UPX stub and an overlay
which contains the original program in a compressed form.
The UPX stub is a statically linked ELF executable and does
the following at program startup:
1) decompress the overlay to a temporary location in /tmp
2) open the temporary file for reading
3) try to delete the temporary file and start (execve)
the uncompressed program in /tmp using /proc/<pid>/fd/X as
attained by step 2)
4) if that fails, fork off a subprocess to clean up and
start the program in /tmp in the meantime
The UPX stub is about 1700 bytes long, partly written in assembler
and only uses kernel syscalls. It is not linked against any libc.
Specific drawbacks:
- You need additional free disk space for the uncompressed program
in your /tmp directory. This program is deleted immediately after
decompression, but you still need it for the full execution time
of the program.
- You must have /proc file system support as the stub wants to open
/proc/<pid>/exe and needs /proc/<pid>/fd/X. This also means that you
cannot compress programs that are used during the boot sequence
before /proc is mounted.
- Utilities like `top' will display numerical values in the process
name field. This is because Linux computes the process name from
the first argument of the last execve syscall (which is typically
something like /proc/<pid>/fd/3).
- Because of temporary decompression to disk the decompression speed
is not as fast as with the other executable formats. Still, I can see
no noticeable delay when starting programs like my ~3 MiB emacs (which
is less than 1 MiB when compressed :-).
Extra options available for this executable format:
--force-execve Force the use of the generic linux/386 "execve"
format, i.e. do not try the linux/elf386 and
linux/sh386 formats.
NOTES FOR PS1/EXE
This is the executable format used by the Sony PlayStation (PSone), a
Mips R3000 based gaming console which is popular since the late '90s.
Support of this format is very similar to the Atari one, because of
nostalgic feelings of one of the authors.
Packed programs will be byte-identical to the original after
uncompression, until further notice.
Maximum uncompressed size: ~1.89 / ~7.60 MiB.
Notes:
- UPX creates as default a suitable executable for CD-Mastering
and console transfer. For a CD-Master main executable you could also try
the special option "--boot-only" as described below.
It has been reported that upx packed executables are fully compatible with
the Sony PlayStation 2 (PS2, PStwo) and Sony PlayStation Portable (PSP) in
Sony PlayStation (PSone) emulation mode.
- Normally the packed files use the same memory areas like the uncompressed
versions, so they will not override other memory areas while unpacking.
If this isn't possible UPX will abort showing a 'packed data overlap'
error. With the "--force" option UPX will relocate the loading address
for the packed file, but this isn't a real problem if it is a single or
the main executable.
Extra options available for this executable format:
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.
--8-bit Uses 8 bit size compression [default: 32 bit]
--8mib-ram PSone has 8 MiB ram available [default: 2 MiB]
--boot-only This format is for main exes and CD-Mastering only !
It may slightly improve the compression ratio,
decompression routines are faster than default ones.
But it cannot be used for console transfer !
--no-align This option disables CD mode 2 data sector format
alignment. May slightly improves the compression ratio,
but the compressed executable will not boot from a CD.
Use it for console transfer only !
NOTES FOR RTM32/PE and ARM/PE
Same as win32/pe.
NOTES FOR TMT/ADAM
This format is used by the TMT Pascal compiler - see http://www.tmt.com/
.
Extra options available for this executable format:
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.
NOTES FOR VMLINUZ/386
The vmlinuz/386 and bvmlinuz/386 formats take a gzip-compressed bootable
Linux kernel image ("vmlinuz", "zImage", "bzImage"), gzip-decompress it
and re-compress it with the UPX compression method.
vmlinuz/386 is completely unrelated to the other Linux executable
formats, and it does not share any of their drawbacks.
Notes:
- Be sure that "vmlinuz/386" or "bvmlinuz/386" is displayed
during compression - otherwise a wrong executable format
may have been used, and the kernel won't boot.
Benefits:
- Better compression (but note that the kernel was already compressed,
so the improvement is not as large as with other formats).
Still, the bytes saved may be essential for special needs like
boot disks.
For example, this is what I get for my 2.2.16 kernel:
1589708 vmlinux
641073 bzImage [original]
560755 bzImage.upx [compressed by "upx -9"]
- Much faster decompression at kernel boot time (but kernel
decompression speed is not really an issue these days).
Drawbacks:
(none)
Extra options available for this executable format:
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.
NOTES FOR WATCOM/LE
UPX has been successfully tested with the following extenders: DOS4G,
DOS4GW, PMODE/W, DOS32a, CauseWay. The WDOS/X extender is partly
supported (for details see the file bugs BUGS).
DLLs and the LX format are not supported.
Extra options available for this executable format:
--le Produce an unbound LE output instead of
keeping the current stub.
NOTES FOR WIN32/PE
The PE support in UPX is quite stable now, but probably there are still
some incompatibilities with some files.
Because of the way UPX (and other packers for this format) works, you
can see increased memory usage of your compressed files because the
whole program is loaded into memory at startup. If you start several
instances of huge compressed programs you're wasting memory because the
common segments of the program won't get shared across the instances. On
the other hand if you're compressing only smaller programs, or running
only one instance of larger programs, then this penalty is smaller, but
it's still there.
If you're running executables from network, then compressed programs
will load faster, and require less bandwidth during execution.
DLLs are supported. But UPX compressed DLLs can not share common data
and code when they got used by multiple applications. So compressing
msvcrt.dll is a waste of memory, but compressing the dll plugins of a
particular application may be a better idea.
Screensavers are supported, with the restriction that the filename must
end with ".scr" (as screensavers are handled slightly different than
normal exe files).
UPX compressed PE files have some minor memory overhead (usually in the
10 - 30 KiB range) which can be seen by specifying the "-i" command line
switch during compression.
Extra options available for this executable format:
--compress-exports=0 Don't compress the export section.
Use this if you plan to run the compressed
program under Wine.
--compress-exports=1 Compress the export section. [DEFAULT]
Compression of the export section can improve the
compression ratio quite a bit but may not work
with all programs (like winword.exe).
UPX never compresses the export section of a DLL
regardless of this option.
--compress-icons=0 Don't compress any icons.
--compress-icons=1 Compress all but the first icon.
--compress-icons=2 Compress all icons which are not in the
first icon directory. [DEFAULT]
--compress-icons=3 Compress all icons.
--compress-resources=0 Don't compress any resources at all.
--keep-resource=list Don't compress resources specified by the list.
The members of the list are separated by commas.
A list member has the following format: I<type[/name]>.
I<Type> is the type of the resource. Standard types
must be specified as decimal numbers, user types can be
specified by decimal IDs or strings. I<Name> is the
identifier of the resource. It can be a decimal number
or a string. For example:
--keep-resource=2/MYBITMAP,5,6/12345
UPX won't compress the named bitmap resource "MYBITMAP",
it leaves every dialog (5) resource uncompressed, and
it won't touch the string table resource with identifier
12345.
--force Force compression even when there is an
unexpected value in a header field.
Use with care.
--strip-relocs=0 Don't strip relocation records.
--strip-relocs=1 Strip relocation records. [DEFAULT]
This option only works on executables with base
address greater or equal to 0x400000. Usually the
compressed files becomes smaller, but some files
may become larger. Note that the resulting file will
not work under Windows 3.x (Win32s).
UPX never strips relocations from a DLL
regardless of this option.
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.
DIAGNOSTICS
Exit status is normally 0; if an error occurs, exit status is 1. If a
warning occurs, exit status is 2.
UPX's diagnostics are intended to be self-explanatory.
BUGS
Please report all bugs immediately to the authors.
AUTHORS
Markus F.X.J. Oberhumer <markus@oberhumer.com>
http://www.oberhumer.com
Laszlo Molnar <ml1050@users.sourceforge.net>
John F. Reiser <jreiser@BitWagon.com>
Jens Medoch <jssg@users.sourceforge.net>
COPYRIGHT
Copyright (C) 1996-2013 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2013 Laszlo Molnar
Copyright (C) 2000-2013 John F. Reiser
Copyright (C) 2002-2013 Jens Medoch
This program may be used freely, and you are welcome to redistribute it
under certain conditions.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the UPX License
Agreement for more details.
You should have received a copy of the UPX License Agreement along with
this program; see the file LICENSE. If not, visit the UPX home page.

BIN
Tools/UPX/upx.exe Normal file

Binary file not shown.

894
Tools/UPX/upx.html Normal file
View File

@ -0,0 +1,894 @@
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>upx - compress or expand executable files</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:root@localhost" />
</head>
<body style="background-color: white">
<!-- INDEX BEGIN -->
<div name="index">
<p><a name="__index__"></a></p>
<!--
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#abstract">ABSTRACT</a></li>
<li><a href="#disclaimer">DISCLAIMER</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<li><a href="#commands">COMMANDS</a></li>
<ul>
<li><a href="#compress">Compress</a></li>
<li><a href="#decompress">Decompress</a></li>
<li><a href="#test">Test</a></li>
<li><a href="#list">List</a></li>
</ul>
<li><a href="#options">OPTIONS</a></li>
<li><a href="#compression_levels___tuning">COMPRESSION LEVELS &amp; TUNING</a></li>
<li><a href="#overlay_handling_options">OVERLAY HANDLING OPTIONS</a></li>
<li><a href="#environment">ENVIRONMENT</a></li>
<li><a href="#notes_for_the_supported_executable_formats">NOTES FOR THE SUPPORTED EXECUTABLE FORMATS</a></li>
<ul>
<li><a href="#notes_for_atari_tos">NOTES FOR ATARI/TOS</a></li>
<li><a href="#notes_for_bvmlinuz_i386">NOTES FOR BVMLINUZ/I386</a></li>
<li><a href="#notes_for_dos_com">NOTES FOR DOS/COM</a></li>
<li><a href="#notes_for_dos_exe">NOTES FOR DOS/EXE</a></li>
<li><a href="#notes_for_dos_sys">NOTES FOR DOS/SYS</a></li>
<li><a href="#notes_for_djgpp2_coff">NOTES FOR DJGPP2/COFF</a></li>
<li><a href="#notes_for_linux__general_">NOTES FOR LINUX [general]</a></li>
<li><a href="#notes_for_linux_elf386">NOTES FOR LINUX/ELF386</a></li>
<li><a href="#notes_for_linux_sh386">NOTES FOR LINUX/SH386</a></li>
<li><a href="#notes_for_linux_386">NOTES FOR LINUX/386</a></li>
<li><a href="#notes_for_ps1_exe">NOTES FOR PS1/EXE</a></li>
<li><a href="#notes_for_rtm32_pe_and_arm_pe">NOTES FOR RTM32/PE and ARM/PE</a></li>
<li><a href="#notes_for_tmt_adam">NOTES FOR TMT/ADAM</a></li>
<li><a href="#notes_for_vmlinuz_386">NOTES FOR VMLINUZ/386</a></li>
<li><a href="#notes_for_watcom_le">NOTES FOR WATCOM/LE</a></li>
<li><a href="#notes_for_win32_pe">NOTES FOR WIN32/PE</a></li>
</ul>
<li><a href="#diagnostics">DIAGNOSTICS</a></li>
<li><a href="#bugs">BUGS</a></li>
<li><a href="#authors">AUTHORS</a></li>
<li><a href="#copyright">COPYRIGHT</a></li>
</ul>
-->
</div>
<!-- INDEX END -->
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>upx - compress or expand executable files</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<p><strong>upx</strong> [&nbsp;<em>command</em>&nbsp;] [&nbsp;<em>options</em>&nbsp;] <em>filename</em>...</p>
<p>
</p>
<hr />
<h1><a name="abstract">ABSTRACT</a></h1>
<pre>
The Ultimate Packer for eXecutables
Copyright (c) 1996-2013 Markus Oberhumer, Laszlo Molnar &amp; John Reiser
<a href="http://upx.sourceforge.net">http://upx.sourceforge.net</a></pre>
<p><strong>UPX</strong> is a portable, extendable, high-performance executable packer for
several different executable formats. It achieves an excellent compression
ratio and offers <em>*very*</em> fast decompression. Your executables suffer
no memory overhead or other drawbacks for most of the formats supported,
because of in-place decompression.</p>
<p>While you may use <strong>UPX</strong> freely for both non-commercial and commercial
executables (for details see the file LICENSE), we would highly
appreciate if you credit <strong>UPX</strong> and ourselves in the documentation,
possibly including a reference to the <strong>UPX</strong> home page. Thanks.</p>
<p>[ Using <strong>UPX</strong> in non-OpenSource applications without proper credits
is considered not politically correct ;-) ]</p>
<p>
</p>
<hr />
<h1><a name="disclaimer">DISCLAIMER</a></h1>
<p><strong>UPX</strong> comes with ABSOLUTELY NO WARRANTY; for details see the file LICENSE.</p>
<p>This is the first production quality release, and we plan that future 1.xx
releases will be backward compatible with this version.</p>
<p>Please report all problems or suggestions to the authors. Thanks.</p>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p><strong>UPX</strong> is a versatile executable packer with the following features:</p>
<pre>
- excellent compression ratio: compresses better than zip/gzip,
use UPX to decrease the size of your distribution !</pre>
<pre>
- very fast decompression: about 10 MiB/sec on an ancient Pentium 133,
about 200 MiB/sec on an Athlon XP 2000+.</pre>
<pre>
- no memory overhead for your compressed executables for most of the
supported formats</pre>
<pre>
- safe: you can list, test and unpack your executables
Also, a checksum of both the compressed and uncompressed file is
maintained internally.</pre>
<pre>
- universal: UPX can pack a number of executable formats:
* atari/tos
* bvmlinuz/386 [bootable Linux kernel]
* djgpp2/coff
* dos/com
* dos/exe
* dos/sys
* linux/386
* linux/elf386
* linux/sh386
* ps1/exe
* rtm32/pe
* tmt/adam
* vmlinuz/386 [bootable Linux kernel]
* vmlinux/386
* watcom/le (supporting DOS4G, PMODE/W, DOS32a and CauseWay)
* win32/pe (exe and dll)
* arm/pe (exe and dll)
* linux/elfamd64
* linux/elfppc32
* mach/elfppc32</pre>
<pre>
- portable: UPX is written in portable endian-neutral C++</pre>
<pre>
- extendable: because of the class layout it's very easy to support
new executable formats or add new compression algorithms</pre>
<pre>
- free: UPX can be distributed and used freely. And from version 0.99
the full source code of UPX is released under the GNU General Public
License (GPL) !</pre>
<p>You probably understand now why we call <strong>UPX</strong> the &quot;<em>ultimate</em>&quot;
executable packer.</p>
<p>
</p>
<hr />
<h1><a name="commands">COMMANDS</a></h1>
<p>
</p>
<h2><a name="compress">Compress</a></h2>
<p>This is the default operation, eg. <strong>upx yourfile.exe</strong> will compress the file
specified on the command line.</p>
<p>
</p>
<h2><a name="decompress">Decompress</a></h2>
<p>All <strong>UPX</strong> supported file formats can be unpacked using the <strong>-d</strong> switch, eg.
<strong>upx -d yourfile.exe</strong> will uncompress the file you've just compressed.</p>
<p>
</p>
<h2><a name="test">Test</a></h2>
<p>The <strong>-t</strong> command tests the integrity of the compressed and uncompressed
data, eg. <strong>upx -t yourfile.exe</strong> check whether your file can be safely
decompressed. Note, that this command doesn't check the whole file, only
the part that will be uncompressed during program execution. This means
that you should not use this command instead of a virus checker.</p>
<p>
</p>
<h2><a name="list">List</a></h2>
<p>The <strong>-l</strong> command prints out some information about the compressed files
specified on the command line as parameters, eg <strong>upx -l yourfile.exe</strong>
shows the compressed / uncompressed size and the compression ratio of
<em>yourfile.exe</em>.</p>
<p>
</p>
<hr />
<h1><a name="options">OPTIONS</a></h1>
<p><strong>-q</strong>: be quiet, suppress warnings</p>
<p><strong>-q -q</strong> (or <strong>-qq</strong>): be very quiet, suppress errors</p>
<p><strong>-q -q -q</strong> (or <strong>-qqq</strong>): produce no output at all</p>
<p><strong>--help</strong>: prints the help</p>
<p><strong>--version</strong>: print the version of <strong>UPX</strong></p>
<p><strong>--exact</strong>: when compressing, require to be able to get a byte-identical file
after decompression with option <strong>-d</strong>. [NOTE: this is work in progress and is
not supported for all formats yet. If you do care, as a workaround you can
compress and then decompress your program a first time - any further
compress-decompress steps should then yield byte-identical results
as compared to the first decompressed version.]</p>
<p>[ ...to be written... - type `<strong>upx --help</strong>' for now ]</p>
<p>
</p>
<hr />
<h1><a name="compression_levels___tuning">COMPRESSION LEVELS &amp; TUNING</a></h1>
<p><strong>UPX</strong> offers ten different compression levels from <strong>-1</strong> to <strong>-9</strong>,
and <strong>--best</strong>. The default compression level is <strong>-8</strong> for files
smaller than 512 KiB, and <strong>-7</strong> otherwise.</p>
<ul>
<li>
<p>Compression levels 1, 2 and 3 are pretty fast.</p>
</li>
<li>
<p>Compression levels 4, 5 and 6 achieve a good time/ratio performance.</p>
</li>
<li>
<p>Compression levels 7, 8 and 9 favor compression ratio over speed.</p>
</li>
<li>
<p>Compression level <strong>--best</strong> may take a long time.</p>
</li>
</ul>
<p>Note that compression level <strong>--best</strong> can be somewhat slow for large
files, but you definitely should use it when releasing a final version
of your program.</p>
<p>Quick info for achieving the best compression ratio:</p>
<ul>
<li>
<p>Try <strong>upx --brute myfile.exe</strong> or even <strong>upx --ultra-brute myfile.exe</strong>.</p>
</li>
<li>
<p>Try if <strong>--overlay=strip</strong> works.</p>
</li>
<li>
<p>For win32/pe programs there's <strong>--strip-relocs=0</strong>. See notes below.</p>
</li>
</ul>
<p>
</p>
<hr />
<h1><a name="overlay_handling_options">OVERLAY HANDLING OPTIONS</a></h1>
<p>Info: An &quot;overlay&quot; means auxiliary data attached after the logical end of
an executable, and it often contains application specific data
(this is a common practice to avoid an extra data file, though
it would be better to use resource sections).</p>
<p><strong>UPX</strong> handles overlays like many other executable packers do: it simply
copies the overlay after the compressed image. This works with some
files, but doesn't work with others, depending on how an application
actually accesses this overlayed data.</p>
<pre>
--overlay=copy Copy any extra data attached to the file. [DEFAULT]</pre>
<pre>
--overlay=strip Strip any overlay from the program instead of
copying it. Be warned, this may make the compressed
program crash or otherwise unusable.</pre>
<pre>
--overlay=skip Refuse to compress any program which has an overlay.</pre>
<p>
</p>
<hr />
<h1><a name="environment">ENVIRONMENT</a></h1>
<p>The environment variable <strong>UPX</strong> can hold a set of default
options for <strong>UPX</strong>. These options are interpreted first and
can be overwritten by explicit command line parameters.
For example:</p>
<pre>
for DOS/Windows: set UPX=-9 --compress-icons#0
for sh/ksh/zsh: UPX=&quot;-9 --compress-icons=0&quot;; export UPX
for csh/tcsh: setenv UPX &quot;-9 --compress-icons=0&quot;</pre>
<p>Under DOS/Windows you must use '#' instead of '=' when setting the
environment variable because of a COMMAND.COM limitation.</p>
<p>Not all of the options are valid in the environment variable -
<strong>UPX</strong> will tell you.</p>
<p>You can explicitly use the <strong>--no-env</strong> option to ignore the
environment variable.</p>
<p>
</p>
<hr />
<h1><a name="notes_for_the_supported_executable_formats">NOTES FOR THE SUPPORTED EXECUTABLE FORMATS</a></h1>
<p>
</p>
<h2><a name="notes_for_atari_tos">NOTES FOR ATARI/TOS</a></h2>
<p>This is the executable format used by the Atari ST/TT, a Motorola 68000
based personal computer which was popular in the late '80s. Support
of this format is only because of nostalgic feelings of one of
the authors and serves no practical purpose :-).
See <a href="http://www.freemint.de">http://www.freemint.de</a> for more info.</p>
<p>Packed programs will be byte-identical to the original after uncompression.
All debug information will be stripped, though.</p>
<p>Extra options available for this executable format:</p>
<pre>
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.</pre>
<p>
</p>
<h2><a name="notes_for_bvmlinuz_i386">NOTES FOR BVMLINUZ/I386</a></h2>
<p>Same as vmlinuz/i386.</p>
<p>
</p>
<h2><a name="notes_for_dos_com">NOTES FOR DOS/COM</a></h2>
<p>Obviously <strong>UPX</strong> won't work with executables that want to read data from
themselves (like some commandline utilities that ship with Win95/98/ME).</p>
<p>Compressed programs only work on a 286+.</p>
<p>Packed programs will be byte-identical to the original after uncompression.</p>
<p>Maximum uncompressed size: ~65100 bytes.</p>
<p>Extra options available for this executable format:</p>
<pre>
--8086 Create an executable that works on any 8086 CPU.</pre>
<pre>
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.</pre>
<pre>
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.</pre>
<p>
</p>
<h2><a name="notes_for_dos_exe">NOTES FOR DOS/EXE</a></h2>
<p>dos/exe stands for all &quot;normal&quot; 16-bit DOS executables.</p>
<p>Obviously <strong>UPX</strong> won't work with executables that want to read data from
themselves (like some command line utilities that ship with Win95/98/ME).</p>
<p>Compressed programs only work on a 286+.</p>
<p>Extra options available for this executable format:</p>
<pre>
--8086 Create an executable that works on any 8086 CPU.</pre>
<pre>
--no-reloc Use no relocation records in the exe header.</pre>
<pre>
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.</pre>
<p>
</p>
<h2><a name="notes_for_dos_sys">NOTES FOR DOS/SYS</a></h2>
<p>Compressed programs only work on a 286+.</p>
<p>Packed programs will be byte-identical to the original after uncompression.</p>
<p>Maximum uncompressed size: ~65350 bytes.</p>
<p>Extra options available for this executable format:</p>
<pre>
--8086 Create an executable that works on any 8086 CPU.</pre>
<pre>
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.</pre>
<pre>
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.</pre>
<p>
</p>
<h2><a name="notes_for_djgpp2_coff">NOTES FOR DJGPP2/COFF</a></h2>
<p>First of all, it is recommended to use <strong>UPX</strong> *instead* of <strong>strip</strong>. strip has
the very bad habit of replacing your stub with its own (outdated) version.
Additionally <strong>UPX</strong> corrects a bug/feature in strip v2.8.x: it
will fix the 4 KiB alignment of the stub.</p>
<p><strong>UPX</strong> includes the full functionality of stubify. This means it will
automatically stubify your COFF files. Use the option <strong>--coff</strong> to
disable this functionality (see below).</p>
<p><strong>UPX</strong> automatically handles Allegro packfiles.</p>
<p>The DLM format (a rather exotic shared library extension) is not supported.</p>
<p>Packed programs will be byte-identical to the original after uncompression.
All debug information and trailing garbage will be stripped, though.</p>
<p>Extra options available for this executable format:</p>
<pre>
--coff Produce COFF output instead of EXE. By default
UPX keeps your current stub.</pre>
<pre>
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.</pre>
<pre>
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.</pre>
<p>
</p>
<h2><a name="notes_for_linux__general_">NOTES FOR LINUX [general]</a></h2>
<p>Introduction</p>
<pre>
Linux/386 support in UPX consists of 3 different executable formats,
one optimized for ELF executables (&quot;linux/elf386&quot;), one optimized
for shell scripts (&quot;linux/sh386&quot;), and one generic format
(&quot;linux/386&quot;).</pre>
<pre>
We will start with a general discussion first, but please
also read the relevant docs for each of the individual formats.</pre>
<pre>
Also, there is special support for bootable kernels - see the
description of the vmlinuz/386 format.</pre>
<p>General user's overview</p>
<pre>
Running a compressed executable program trades less space on a
``permanent'' storage medium (such as a hard disk, floppy disk,
CD-ROM, flash memory, EPROM, etc.) for more space in one or more
``temporary'' storage media (such as RAM, swap space, /tmp, etc.).
Running a compressed executable also requires some additional CPU
cycles to generate the compressed executable in the first place,
and to decompress it at each invocation.</pre>
<pre>
How much space is traded? It depends on the executable, but many
programs save 30% to 50% of permanent disk space. How much CPU
overhead is there? Again, it depends on the executable, but
decompression speed generally is at least many megabytes per second,
and frequently is limited by the speed of the underlying disk
or network I/O.</pre>
<pre>
Depending on the statistics of usage and access, and the relative
speeds of CPU, RAM, swap space, /tmp, and file system storage, then
invoking and running a compressed executable can be faster than
directly running the corresponding uncompressed program.
The operating system might perform fewer expensive I/O operations
to invoke the compressed program. Paging to or from swap space
or /tmp might be faster than paging from the general file system.
``Medium-sized'' programs which access about 1/3 to 1/2 of their
stored program bytes can do particularly well with compression.
Small programs tend not to benefit as much because the absolute
savings is less. Big programs tend not to benefit proportionally
because each invocation may use only a small fraction of the program,
yet UPX decompresses the entire program before invoking it.
But in environments where disk or flash memory storage is limited,
then compression may win anyway.</pre>
<pre>
Currently, executables compressed by UPX do not share RAM at runtime
in the way that executables mapped from a file system do. As a
result, if the same program is run simultaneously by more than one
process, then using the compressed version will require more RAM and/or
swap space. So, shell programs (bash, csh, etc.) and ``make''
might not be good candidates for compression.</pre>
<pre>
UPX recognizes three executable formats for Linux: Linux/elf386,
Linux/sh386, and Linux/386. Linux/386 is the most generic format;
it accommodates any file that can be executed. At runtime, the UPX
decompression stub re-creates in /tmp a copy of the original file,
and then the copy is (re-)executed with the same arguments.
ELF binary executables prefer the Linux/elf386 format by default,
because UPX decompresses them directly into RAM, uses only one
exec, does not use space in /tmp, and does not use /proc.
Shell scripts where the underlying shell accepts a ``-c'' argument
can use the Linux/sh386 format. UPX decompresses the shell script
into low memory, then maps the shell and passes the entire text of the
script as an argument with a leading ``-c''.</pre>
<p>General benefits:</p>
<pre>
- UPX can compress all executables, be it AOUT, ELF, libc4, libc5,
libc6, Shell/Perl/Python/... scripts, standalone Java .class
binaries, or whatever...
All scripts and programs will work just as before.</pre>
<pre>
- Compressed programs are completely self-contained. No need for
any external program.</pre>
<pre>
- UPX keeps your original program untouched. This means that
after decompression you will have a byte-identical version,
and you can use UPX as a file compressor just like gzip.
[ Note that UPX maintains a checksum of the file internally,
so it is indeed a reliable alternative. ]</pre>
<pre>
- As the stub only uses syscalls and isn't linked against libc it
should run under any Linux configuration that can run ELF
binaries.</pre>
<pre>
- For the same reason compressed executables should run under
FreeBSD and other systems which can run Linux binaries.
[ Please send feedback on this topic ]</pre>
<p>General drawbacks:</p>
<pre>
- It is not advisable to compress programs which usually have many
instances running (like `sh' or `make') because the common segments of
compressed programs won't be shared any longer between different
processes.</pre>
<pre>
- `ldd' and `size' won't show anything useful because all they
see is the statically linked stub. Since version 0.82 the section
headers are stripped from the UPX stub and `size' doesn't even
recognize the file format. The file patches/patch-elfcode.h has a
patch to fix this bug in `size' and other programs which use GNU BFD.</pre>
<p>General notes:</p>
<pre>
- As UPX leaves your original program untouched it is advantageous
to strip it before compression.</pre>
<pre>
- If you compress a script you will lose platform independence -
this could be a problem if you are using NFS mounted disks.</pre>
<pre>
- Compression of suid, guid and sticky-bit programs is rejected
because of possible security implications.</pre>
<pre>
- For the same reason there is no sense in making any compressed
program suid.</pre>
<pre>
- Obviously UPX won't work with executables that want to read data
from themselves. E.g., this might be a problem for Perl scripts
which access their __DATA__ lines.</pre>
<pre>
- In case of internal errors the stub will abort with exitcode 127.
Typical reasons for this to happen are that the program has somehow
been modified after compression.
Running `strace -o strace.log compressed_file' will tell you more.</pre>
<p>
</p>
<h2><a name="notes_for_linux_elf386">NOTES FOR LINUX/ELF386</a></h2>
<p>Please read the general Linux description first.</p>
<p>The linux/elf386 format decompresses directly into RAM,
uses only one exec, does not use space in /tmp,
and does not use /proc.</p>
<p>Linux/elf386 is automatically selected for Linux ELF executables.</p>
<p>Packed programs will be byte-identical to the original after uncompression.</p>
<p>How it works:</p>
<pre>
For ELF executables, UPX decompresses directly to memory, simulating
the mapping that the operating system kernel uses during exec(),
including the PT_INTERP program interpreter (if any).
The brk() is set by a special PT_LOAD segment in the compressed
executable itself. UPX then wipes the stack clean except for
arguments, environment variables, and Elf_auxv entries (this is
required by bugs in the startup code of /lib/ld-linux.so as of
May 2000), and transfers control to the program interpreter or
the e_entry address of the original executable.</pre>
<pre>
The UPX stub is about 1700 bytes long, partly written in assembler
and only uses kernel syscalls. It is not linked against any libc.</pre>
<p>Specific drawbacks:</p>
<pre>
- For linux/elf386 and linux/sh386 formats, you will be relying on
RAM and swap space to hold all of the decompressed program during
the lifetime of the process. If you already use most of your swap
space, then you may run out. A system that is &quot;out of memory&quot;
can become fragile. Many programs do not react gracefully when
malloc() returns 0. With newer Linux kernels, the kernel
may decide to kill some processes to regain memory, and you
may not like the kernel's choice of which to kill. Running
/usr/bin/top is one way to check on the usage of swap space.</pre>
<p>Extra options available for this executable format:</p>
<pre>
(none)</pre>
<p>
</p>
<h2><a name="notes_for_linux_sh386">NOTES FOR LINUX/SH386</a></h2>
<p>Please read the general Linux description first.</p>
<p>Shell scripts where the underling shell accepts a ``-c'' argument
can use the Linux/sh386 format. <strong>UPX</strong> decompresses the shell script
into low memory, then maps the shell and passes the entire text of the
script as an argument with a leading ``-c''.
It does not use space in /tmp, and does not use /proc.</p>
<p>Linux/sh386 is automatically selected for shell scripts that
use a known shell.</p>
<p>Packed programs will be byte-identical to the original after uncompression.</p>
<p>How it works:</p>
<pre>
For shell script executables (files beginning with &quot;#!/&quot; or &quot;#! /&quot;)
where the shell is known to accept &quot;-c &lt;command&gt;&quot;, UPX decompresses
the file into low memory, then maps the shell (and its PT_INTERP),
and passes control to the shell with the entire decompressed file
as the argument after &quot;-c&quot;. Known shells are sh, ash, bash, bsh, csh,
ksh, tcsh, pdksh. Restriction: UPX cannot use this method
for shell scripts which use the one optional string argument after
the shell name in the script (example: &quot;#! /bin/sh option3\n&quot;.)</pre>
<pre>
The UPX stub is about 1700 bytes long, partly written in assembler
and only uses kernel syscalls. It is not linked against any libc.</pre>
<p>Specific drawbacks:</p>
<pre>
- For linux/elf386 and linux/sh386 formats, you will be relying on
RAM and swap space to hold all of the decompressed program during
the lifetime of the process. If you already use most of your swap
space, then you may run out. A system that is &quot;out of memory&quot;
can become fragile. Many programs do not react gracefully when
malloc() returns 0. With newer Linux kernels, the kernel
may decide to kill some processes to regain memory, and you
may not like the kernel's choice of which to kill. Running
/usr/bin/top is one way to check on the usage of swap space.</pre>
<p>Extra options available for this executable format:</p>
<pre>
(none)</pre>
<p>
</p>
<h2><a name="notes_for_linux_386">NOTES FOR LINUX/386</a></h2>
<p>Please read the general Linux description first.</p>
<p>The generic linux/386 format decompresses to /tmp and needs
/proc file system support. It starts the decompressed program
via the <code>execve()</code> syscall.</p>
<p>Linux/386 is only selected if the specialized linux/elf386
and linux/sh386 won't recognize a file.</p>
<p>Packed programs will be byte-identical to the original after uncompression.</p>
<p>How it works:</p>
<pre>
For files which are not ELF and not a script for a known &quot;-c&quot; shell,
UPX uses kernel execve(), which first requires decompressing to a
temporary file in the file system. Interestingly -
because of the good memory management of the Linux kernel - this
often does not introduce a noticeable delay, and in fact there
will be no disk access at all if you have enough free memory as
the entire process takes places within the file system buffers.</pre>
<pre>
A compressed executable consists of the UPX stub and an overlay
which contains the original program in a compressed form.</pre>
<pre>
The UPX stub is a statically linked ELF executable and does
the following at program startup:</pre>
<pre>
1) decompress the overlay to a temporary location in /tmp
2) open the temporary file for reading
3) try to delete the temporary file and start (execve)
the uncompressed program in /tmp using /proc/&lt;pid&gt;/fd/X as
attained by step 2)
4) if that fails, fork off a subprocess to clean up and
start the program in /tmp in the meantime</pre>
<pre>
The UPX stub is about 1700 bytes long, partly written in assembler
and only uses kernel syscalls. It is not linked against any libc.</pre>
<p>Specific drawbacks:</p>
<pre>
- You need additional free disk space for the uncompressed program
in your /tmp directory. This program is deleted immediately after
decompression, but you still need it for the full execution time
of the program.</pre>
<pre>
- You must have /proc file system support as the stub wants to open
/proc/&lt;pid&gt;/exe and needs /proc/&lt;pid&gt;/fd/X. This also means that you
cannot compress programs that are used during the boot sequence
before /proc is mounted.</pre>
<pre>
- Utilities like `top' will display numerical values in the process
name field. This is because Linux computes the process name from
the first argument of the last execve syscall (which is typically
something like /proc/&lt;pid&gt;/fd/3).</pre>
<pre>
- Because of temporary decompression to disk the decompression speed
is not as fast as with the other executable formats. Still, I can see
no noticeable delay when starting programs like my ~3 MiB emacs (which
is less than 1 MiB when compressed :-).</pre>
<p>Extra options available for this executable format:</p>
<pre>
--force-execve Force the use of the generic linux/386 &quot;execve&quot;
format, i.e. do not try the linux/elf386 and
linux/sh386 formats.</pre>
<p>
</p>
<h2><a name="notes_for_ps1_exe">NOTES FOR PS1/EXE</a></h2>
<p>This is the executable format used by the Sony PlayStation (PSone),
a Mips R3000 based gaming console which is popular since the late '90s.
Support of this format is very similar to the Atari one, because of
nostalgic feelings of one of the authors.</p>
<p>Packed programs will be byte-identical to the original after uncompression,
until further notice.</p>
<p>Maximum uncompressed size: ~1.89 / ~7.60 MiB.</p>
<p>Notes:</p>
<pre>
- UPX creates as default a suitable executable for CD-Mastering
and console transfer. For a CD-Master main executable you could also try
the special option &quot;--boot-only&quot; as described below.
It has been reported that upx packed executables are fully compatible with
the Sony PlayStation 2 (PS2, PStwo) and Sony PlayStation Portable (PSP) in
Sony PlayStation (PSone) emulation mode.</pre>
<pre>
- Normally the packed files use the same memory areas like the uncompressed
versions, so they will not override other memory areas while unpacking.
If this isn't possible UPX will abort showing a 'packed data overlap'
error. With the &quot;--force&quot; option UPX will relocate the loading address
for the packed file, but this isn't a real problem if it is a single or
the main executable.</pre>
<p>Extra options available for this executable format:</p>
<pre>
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.</pre>
<pre>
--8-bit Uses 8 bit size compression [default: 32 bit]</pre>
<pre>
--8mib-ram PSone has 8 MiB ram available [default: 2 MiB]</pre>
<pre>
--boot-only This format is for main exes and CD-Mastering only !
It may slightly improve the compression ratio,
decompression routines are faster than default ones.
But it cannot be used for console transfer !</pre>
<pre>
--no-align This option disables CD mode 2 data sector format
alignment. May slightly improves the compression ratio,
but the compressed executable will not boot from a CD.
Use it for console transfer only !</pre>
<p>
</p>
<h2><a name="notes_for_rtm32_pe_and_arm_pe">NOTES FOR RTM32/PE and ARM/PE</a></h2>
<p>Same as win32/pe.</p>
<p>
</p>
<h2><a name="notes_for_tmt_adam">NOTES FOR TMT/ADAM</a></h2>
<p>This format is used by the TMT Pascal compiler - see <a href="http://www.tmt.com/">http://www.tmt.com/</a> .</p>
<p>Extra options available for this executable format:</p>
<pre>
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.</pre>
<pre>
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.</pre>
<p>
</p>
<h2><a name="notes_for_vmlinuz_386">NOTES FOR VMLINUZ/386</a></h2>
<p>The vmlinuz/386 and bvmlinuz/386 formats take a gzip-compressed
bootable Linux kernel image (&quot;vmlinuz&quot;, &quot;zImage&quot;, &quot;bzImage&quot;),
gzip-decompress it and re-compress it with the <strong>UPX</strong> compression method.</p>
<p>vmlinuz/386 is completely unrelated to the other Linux executable
formats, and it does not share any of their drawbacks.</p>
<p>Notes:</p>
<pre>
- Be sure that &quot;vmlinuz/386&quot; or &quot;bvmlinuz/386&quot; is displayed
during compression - otherwise a wrong executable format
may have been used, and the kernel won't boot.</pre>
<p>Benefits:</p>
<pre>
- Better compression (but note that the kernel was already compressed,
so the improvement is not as large as with other formats).
Still, the bytes saved may be essential for special needs like
boot disks.</pre>
<pre>
For example, this is what I get for my 2.2.16 kernel:
1589708 vmlinux
641073 bzImage [original]
560755 bzImage.upx [compressed by &quot;upx -9&quot;]</pre>
<pre>
- Much faster decompression at kernel boot time (but kernel
decompression speed is not really an issue these days).</pre>
<p>Drawbacks:</p>
<pre>
(none)</pre>
<p>Extra options available for this executable format:</p>
<pre>
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.</pre>
<pre>
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.</pre>
<p>
</p>
<h2><a name="notes_for_watcom_le">NOTES FOR WATCOM/LE</a></h2>
<p><strong>UPX</strong> has been successfully tested with the following extenders:
DOS4G, DOS4GW, PMODE/W, DOS32a, CauseWay.
The WDOS/X extender is partly supported (for details
see the file bugs BUGS).</p>
<p>DLLs and the LX format are not supported.</p>
<p>Extra options available for this executable format:</p>
<pre>
--le Produce an unbound LE output instead of
keeping the current stub.</pre>
<p>
</p>
<h2><a name="notes_for_win32_pe">NOTES FOR WIN32/PE</a></h2>
<p>The PE support in <strong>UPX</strong> is quite stable now, but probably there are
still some incompatibilities with some files.</p>
<p>Because of the way <strong>UPX</strong> (and other packers for this format) works, you
can see increased memory usage of your compressed files because the whole
program is loaded into memory at startup.
If you start several instances of huge compressed programs you're
wasting memory because the common segments of the program won't
get shared across the instances.
On the other hand if you're compressing only smaller programs, or
running only one instance of larger programs, then this penalty is
smaller, but it's still there.</p>
<p>If you're running executables from network, then compressed programs
will load faster, and require less bandwidth during execution.</p>
<p>DLLs are supported. But UPX compressed DLLs can not share common data and
code when they got used by multiple applications. So compressing msvcrt.dll
is a waste of memory, but compressing the dll plugins of a particular
application may be a better idea.</p>
<p>Screensavers are supported, with the restriction that the filename
must end with &quot;.scr&quot; (as screensavers are handled slightly different
than normal exe files).</p>
<p>UPX compressed PE files have some minor memory overhead (usually in the
10 - 30 KiB range) which can be seen by specifying the &quot;-i&quot; command
line switch during compression.</p>
<p>Extra options available for this executable format:</p>
<pre>
--compress-exports=0 Don't compress the export section.
Use this if you plan to run the compressed
program under Wine.
--compress-exports=1 Compress the export section. [DEFAULT]
Compression of the export section can improve the
compression ratio quite a bit but may not work
with all programs (like winword.exe).
UPX never compresses the export section of a DLL
regardless of this option.</pre>
<pre>
--compress-icons=0 Don't compress any icons.
--compress-icons=1 Compress all but the first icon.
--compress-icons=2 Compress all icons which are not in the
first icon directory. [DEFAULT]
--compress-icons=3 Compress all icons.</pre>
<pre>
--compress-resources=0 Don't compress any resources at all.</pre>
<pre>
--keep-resource=list Don't compress resources specified by the list.
The members of the list are separated by commas.
A list member has the following format: I&lt;type[/name]&gt;.
I&lt;Type&gt; is the type of the resource. Standard types
must be specified as decimal numbers, user types can be
specified by decimal IDs or strings. I&lt;Name&gt; is the
identifier of the resource. It can be a decimal number
or a string. For example:</pre>
<pre>
--keep-resource=2/MYBITMAP,5,6/12345</pre>
<pre>
UPX won't compress the named bitmap resource &quot;MYBITMAP&quot;,
it leaves every dialog (5) resource uncompressed, and
it won't touch the string table resource with identifier
12345.</pre>
<pre>
--force Force compression even when there is an
unexpected value in a header field.
Use with care.</pre>
<pre>
--strip-relocs=0 Don't strip relocation records.
--strip-relocs=1 Strip relocation records. [DEFAULT]
This option only works on executables with base
address greater or equal to 0x400000. Usually the
compressed files becomes smaller, but some files
may become larger. Note that the resulting file will
not work under Windows 3.x (Win32s).
UPX never strips relocations from a DLL
regardless of this option.</pre>
<pre>
--all-methods Compress the program several times, using all
available compression methods. This may improve
the compression ratio in some cases, but usually
the default method gives the best results anyway.</pre>
<pre>
--all-filters Compress the program several times, using all
available preprocessing filters. This may improve
the compression ratio in some cases, but usually
the default filter gives the best results anyway.</pre>
<p>
</p>
<hr />
<h1><a name="diagnostics">DIAGNOSTICS</a></h1>
<p>Exit status is normally 0; if an error occurs, exit status
is 1. If a warning occurs, exit status is 2.</p>
<p><strong>UPX</strong>'s diagnostics are intended to be self-explanatory.</p>
<p>
</p>
<hr />
<h1><a name="bugs">BUGS</a></h1>
<p>Please report all bugs immediately to the authors.</p>
<p>
</p>
<hr />
<h1><a name="authors">AUTHORS</a></h1>
<pre>
Markus F.X.J. Oberhumer &lt;markus@oberhumer.com&gt;
<a href="http://www.oberhumer.com">http://www.oberhumer.com</a></pre>
<pre>
Laszlo Molnar &lt;ml1050@users.sourceforge.net&gt;</pre>
<pre>
John F. Reiser &lt;jreiser@BitWagon.com&gt;</pre>
<pre>
Jens Medoch &lt;jssg@users.sourceforge.net&gt;</pre>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (C) 1996-2013 Markus Franz Xaver Johannes Oberhumer</p>
<p>Copyright (C) 1996-2013 Laszlo Molnar</p>
<p>Copyright (C) 2000-2013 John F. Reiser</p>
<p>Copyright (C) 2002-2013 Jens Medoch</p>
<p>This program may be used freely, and you are welcome to
redistribute it under certain conditions.</p>
<p>This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
<strong>UPX License Agreement</strong> for more details.</p>
<p>You should have received a copy of the UPX License Agreement along
with this program; see the file LICENSE. If not, visit the UPX home page.</p>
</body>
</html>