Version 4.3.1

git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES2/trunk@188 b2cfbe5a-eba1-4a0c-8b32-7feea0a119f2
This commit is contained in:
roberto 2013-06-25 17:03:57 +00:00
parent d1f223e36d
commit bc3422ea70
97 changed files with 7407 additions and 1010 deletions

Binary file not shown.

View File

@ -1025,7 +1025,8 @@ CREATE TABLE PEDIDOS_PROVEEDOR (
ID_FORMA_PAGO TIPO_ID,
FECHA_ENVIO DATE,
ID_FACTURA TIPO_ID,
REF_FACTURA_PROV VARCHAR(255) COLLATE ES_ES
REF_FACTURA_PROV VARCHAR(255) COLLATE ES_ES,
REFERENCIA_CLIENTE VARCHAR(255) COLLATE ES_ES
);
CREATE TABLE PEDIDOS_PROVEEDOR_DETALLES (
@ -1378,7 +1379,7 @@ SELECT ALBARANES_PROVEEDOR_DETALLES.ID_ALBARAN,
ALBARANES_PROVEEDOR.ID_ALMACEN,
COALESCE(ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO, 0),
CASE
WHEN ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO IS NULL THEN ALBARANES_PROVEEDOR_DETALLES.CONCEPTO
WHEN (COALESCE(ALBARANES_PROVEEDOR_DETALLES.ID_ARTICULO, 0)=0) THEN ALBARANES_PROVEEDOR_DETALLES.CONCEPTO
ELSE NULL
END,
SUM (COALESCE(ALBARANES_PROVEEDOR_DETALLES.CANTIDAD, 0)) AS CANTIDAD
@ -2826,7 +2827,7 @@ SELECT PEDIDOS_PROVEEDOR_DETALLES.ID_PEDIDO,
PEDIDOS_PROVEEDOR.ID_ALMACEN,
COALESCE(PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO, 0),
CASE
WHEN PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO IS NULL THEN PEDIDOS_PROVEEDOR_DETALLES.CONCEPTO
WHEN (COALESCE(PEDIDOS_PROVEEDOR_DETALLES.ID_ARTICULO, 0) = 0) THEN PEDIDOS_PROVEEDOR_DETALLES.CONCEPTO
ELSE NULL
END,
SUM(COALESCE(PEDIDOS_PROVEEDOR_DETALLES.CANTIDAD, 0))
@ -3257,7 +3258,7 @@ CREATE VIEW V_PEDIDOS_PROVEEDOR(
ID,
ID_EMPRESA,
ID_PROVEEDOR,
NOMBRE,
NOMBRE,
ID_DIRECCION,
PERSONA_CONTACTO_PROV,
REFERENCIA,
@ -3286,6 +3287,7 @@ CREATE VIEW V_PEDIDOS_PROVEEDOR(
USUARIO,
ID_PEDIDO_CLIENTE,
REF_PED_CLIENTE,
REFERENCIA_CLIENTE,
IMPORTE_NETO,
IMPORTE_PORTE,
DESCUENTO,
@ -3332,6 +3334,7 @@ SELECT
PEDIDOS_PROVEEDOR.USUARIO,
PEDIDOS_PROVEEDOR.ID_PEDIDO_CLIENTE,
PEDIDOS_CLIENTE.REFERENCIA AS REF_PED_CLIENTE,
PEDIDOS_PROVEEDOR.REFERENCIA_CLIENTE,
PEDIDOS_PROVEEDOR.IMPORTE_NETO,
PEDIDOS_PROVEEDOR.IMPORTE_PORTE,
PEDIDOS_PROVEEDOR.DESCUENTO,
@ -4099,6 +4102,17 @@ from v_ped_cli_proceso
group by id_pedido
;
CREATE VIEW V_PED_CLI_SITUACION_X_ALBARANES(
ID_PEDIDO,
NUM_ALBARANES,
SITUACION)
AS
select ID_PEDIDO, count(ID), 'ALBARANADO' as SITUACION
from albaranes_cliente
where ID_PEDIDO is not null
group by 1
;
CREATE VIEW V_PEDIDOS_CLIENTE(
ID,
ID_EMPRESA,
@ -4143,7 +4157,11 @@ SELECT
CONTACTOS.NOMBRE,
PEDIDOS_CLIENTE.REFERENCIA,
PEDIDOS_CLIENTE.REFERENCIA_CLIENTE,
TRIM(V_PED_CLI_SITUACION.SITUACION),
TRIM (CASE
when V_PED_CLI_SITUACION_X_ALBARANES.id_pedido is not null then V_PED_CLI_SITUACION_X_ALBARANES.SITUACION
else 'PENDIENTE'
end) as SITUACION,
/* TRIM(V_PED_CLI_SITUACION2.SITUACION),*/
PEDIDOS_CLIENTE.FECHA_PEDIDO,
PEDIDOS_CLIENTE.CALLE,
PEDIDOS_CLIENTE.CODIGO_POSTAL,
@ -4171,8 +4189,9 @@ SELECT
IMPRESIONES.NUM_COPIAS,
REGISTRO_CORREOS.NUM_CORREOS
FROM
V_PED_CLI_SITUACION
INNER JOIN PEDIDOS_CLIENTE ON (PEDIDOS_CLIENTE.ID = V_PED_CLI_SITUACION.ID_PEDIDO)
PEDIDOS_CLIENTE
LEFT JOIN V_PED_CLI_SITUACION_X_ALBARANES ON (V_PED_CLI_SITUACION_X_ALBARANES.ID_PEDIDO = PEDIDOS_CLIENTE.ID)
/* INNER JOIN PEDIDOS_CLIENTE ON (PEDIDOS_CLIENTE.ID = V_PED_CLI_SITUACION.ID_PEDIDO)*/
INNER JOIN CONTACTOS ON (PEDIDOS_CLIENTE.ID_CLIENTE = CONTACTOS.ID)
LEFT JOIN IMPRESIONES
ON ((IMPRESIONES.ID_TABLA = PEDIDOS_CLIENTE.ID) AND (IMPRESIONES.TABLA = 'PEDIDOSCLIENTE'))

BIN
Resources/Logotipo K.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -45,10 +45,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="PackageDescription">Libreria base de FactuGES</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><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">Base.dpk</Source></Source></Delphi.Personality></BorlandProject></BorlandProject>
@ -67,58 +63,58 @@
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Servicios\FactuGES_Intf.pas" />
<DCCReference Include="..\Servidor\adortl.dcp" />
<DCCReference Include="..\Servidor\cxDataD11.dcp" />
<DCCReference Include="..\Servidor\cxEditorsD11.dcp" />
<DCCReference Include="..\Servidor\cxExportD11.dcp" />
<DCCReference Include="..\Servidor\cxExtEditorsD11.dcp" />
<DCCReference Include="..\Servidor\cxGridD11.dcp" />
<DCCReference Include="..\Servidor\cxIntl6D11.dcp" />
<DCCReference Include="..\Servidor\cxIntlPrintSys3D11.dcp" />
<DCCReference Include="..\Servidor\cxLibraryD11.dcp" />
<DCCReference Include="..\Servidor\cxPageControlD11.dcp" />
<DCCReference Include="..\Servidor\DataAbstract_Core_D11.dcp" />
<DCCReference Include="..\Servidor\dbrtl.dcp" />
<DCCReference Include="..\Servidor\dclIndyCore.dcp" />
<DCCReference Include="..\Servidor\designide.dcp" />
<DCCReference Include="..\Servidor\dsnap.dcp" />
<DCCReference Include="..\Servidor\dxCoreD11.dcp" />
<DCCReference Include="..\Servidor\dxGDIPlusD11.dcp" />
<DCCReference Include="..\Servidor\dxPSCoreD11.dcp" />
<DCCReference Include="..\Servidor\dxThemeD11.dcp" />
<DCCReference Include="..\Servidor\GUISDK_D11R.dcp" />
<DCCReference Include="..\Servidor\IndyCore.dcp" />
<DCCReference Include="..\Servidor\IndyProtocols.dcp" />
<DCCReference Include="..\Servidor\IndySystem.dcp" />
<DCCReference Include="..\Servidor\Jcl.dcp" />
<DCCReference Include="..\Servidor\JclVcl.dcp" />
<DCCReference Include="..\Servidor\JSDialog100.dcp" />
<DCCReference Include="..\Servidor\JvCmpD11R.dcp" />
<DCCReference Include="..\Servidor\JvCoreD11R.dcp" />
<DCCReference Include="..\Servidor\JvCtrlsD11R.dcp" />
<DCCReference Include="..\Servidor\JvDlgsD11R.dcp" />
<DCCReference Include="..\Servidor\JvMMD11R.dcp" />
<DCCReference Include="..\Servidor\JvNetD11R.dcp" />
<DCCReference Include="..\Servidor\JvPageCompsD11R.dcp" />
<DCCReference Include="..\Servidor\JvStdCtrlsD11R.dcp" />
<DCCReference Include="..\Servidor\JvSystemD11R.dcp" />
<DCCReference Include="..\Servidor\pckMD5.dcp" />
<DCCReference Include="..\Servidor\pckUCDataConnector.dcp" />
<DCCReference Include="..\Servidor\pckUserControl_RT.dcp" />
<DCCReference Include="..\Servidor\PngComponentsD10.dcp" />
<DCCReference Include="..\Servidor\PNG_D10.dcp" />
<DCCReference Include="..\Servidor\RemObjects_Core_D11.dcp" />
<DCCReference Include="..\Servidor\RemObjects_Indy_D11.dcp" />
<DCCReference Include="..\Servidor\rtl.dcp" />
<DCCReference Include="..\Servidor\TB2k_D10.dcp" />
<DCCReference Include="..\Servidor\tbx_d10.dcp" />
<DCCReference Include="..\Servidor\vcl.dcp" />
<DCCReference Include="..\Servidor\vclactnband.dcp" />
<DCCReference Include="..\Servidor\vcldb.dcp" />
<DCCReference Include="..\Servidor\vcljpg.dcp" />
<DCCReference Include="..\Servidor\VclSmp.dcp" />
<DCCReference Include="..\Servidor\vclx.dcp" />
<DCCReference Include="..\Servidor\xmlrtl.dcp" />
<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\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\cxIntl6D11.dcp" />
<DCCReference Include="C:\Documents and Settings\Usuario\cxIntlPrintSys3D11.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\dxCoreD11.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\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\RemObjects_Indy_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

@ -53,7 +53,7 @@
<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">4</VersionInfo><VersionInfo Name="MinorVer">2</VersionInfo><VersionInfo Name="Release">9</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">4.2.9.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">4.2.9.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Excluded_Packages></Excluded_Packages><Source><Source Name="MainSource">FactuGES.dpr</Source></Source></Delphi.Personality><ModelSupport>False</ModelSupport></BorlandProject></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">4</VersionInfo><VersionInfo Name="MinorVer">3</VersionInfo><VersionInfo Name="Release">1</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">4.3.1.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">4.3.1.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Excluded_Packages></Excluded_Packages><Source><Source Name="MainSource">FactuGES.dpr</Source></Source></Delphi.Personality><ModelSupport>False</ModelSupport></BorlandProject></BorlandProject>
</ProjectExtensions>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
<ItemGroup>

View File

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

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -54,8 +54,8 @@ type
function Print(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false;
const VerImprimirPrecios: Boolean = False; const VerImprimirRefProveedor: Boolean = False;
const VerImprimirObservaciones: Boolean = False; const VerImprimirIncidencias: Boolean = False): Boolean;
procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false);
procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false);
procedure RecalcularImportes(AAlbaran: IBizAlbaranCliente);
function EsModificable(AAlbaran: IBizAlbaranCliente): Boolean;
@ -175,8 +175,8 @@ type
function Print(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false;
const VerImprimirPrecios: Boolean = False; const VerImprimirRefProveedor: Boolean = False;
const VerImprimirObservaciones: Boolean = False; const VerImprimirIncidencias: Boolean = False): Boolean;
procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false);
procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false);
function DarListaAnosAlbaranes: TStringList;
procedure FiltrarAno(AAlbaran: IBizAlbaranCliente; ADynWhereDataTable: WideString; const Ano: String);
@ -961,27 +961,72 @@ begin
Result := not (AAlbaran.ID_FACTURA > 0);
end;
procedure TAlbaranesClienteController.EtiquetasPreview(AAlbaran: IBizAlbaranCliente; Const withRefCliente: Boolean);
procedure TAlbaranesClienteController.EtiquetasPreview(AAlbaran: IBizAlbaranCliente; AllItems: Boolean = false);
var
AReportController : IAlbaranesClienteReportController;
ID_Albaranes: TIntegerList;
begin
AReportController := TAlbaranesClienteReportController.Create;
ID_Albaranes := TIntegerList.Create;
try
AReportController.EtiquetasPreview(AAlbaran.ID, withRefCliente);
//Si deseamos previsualizar todos los items del objeto albaran
if AllItems then
begin
with AAlbaran.DataTable do
begin
First;
while not EOF do
begin
ID_Albaranes.Add(AAlbaran.ID);
Next;
end;
end;
end
//Solo previsualizamos el item seleccionado
else
ID_Albaranes.Add(AAlbaran.ID);
AReportController.EtiquetasPreview(ID_Albaranes);
finally
AReportController := NIL;
FreeANDNIL(ID_Albaranes);
end;
end;
procedure TAlbaranesClienteController.EtiquetasPrint(AAlbaran: IBizAlbaranCliente; Const withRefCliente: Boolean);
procedure TAlbaranesClienteController.EtiquetasPrint(AAlbaran: IBizAlbaranCliente; AllItems: Boolean = false);
var
AReportController : IAlbaranesClienteReportController;
ID_Albaranes: TIntegerList;
begin
AReportController := TAlbaranesClienteReportController.Create;
ID_Albaranes := TIntegerList.Create;
try
AReportController.EtiquetasPrint(AAlbaran.ID, withRefCliente);
//Si deseamos previsualizar todos los items del objeto albaran
if AllItems then
begin
with AAlbaran.DataTable do
begin
First;
while not EOF do
begin
ID_Albaranes.Add(AAlbaran.ID);
Next;
end;
end;
end
//Solo previsualizamos el item seleccionado
else
ID_Albaranes.Add(AAlbaran.ID);
AReportController.EtiquetasPrint(ID_Albaranes);
finally
AReportController := NIL;
FreeANDNIL(ID_Albaranes);
end;
end;

View File

@ -16,8 +16,8 @@ type
function Print(const AListaID : TIntegerList;
const VerImprimirPrecios: Boolean = False; const VerImprimirRefProveedor: Boolean = False;
const VerImprimirObservaciones: Boolean = False; const VerImprimirIncidencias: Boolean = False): Boolean;
procedure EtiquetasPreview(const AID : integer; Const withRefCliente: Boolean);
procedure EtiquetasPrint(const AID : integer; Const withRefCliente: Boolean);
procedure EtiquetasPreview(const AListaID : TIntegerList);
procedure EtiquetasPrint(const AListaID : TIntegerList);
function ExportToWord(const AID: Integer; const AFileName : String = ''): Boolean;
function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean;
end;
@ -39,8 +39,8 @@ type
const VerImprimirObservaciones: Boolean = False; const VerImprimirIncidencias: Boolean = False): Boolean;
function ExportToWord(const AID: Integer; const AFileName : String = ''): Boolean;
function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean;
procedure EtiquetasPreview(const AID : integer; const withRefCliente: Boolean);
procedure EtiquetasPrint(const AID : integer; const withRefCliente: Boolean);
procedure EtiquetasPreview(const AListaID : TIntegerList);
procedure EtiquetasPrint(const AListaID : TIntegerList);
end;
@ -72,7 +72,7 @@ begin
inherited;
end;
procedure TAlbaranesClienteReportController.EtiquetasPreview(const AID: integer; const withRefCliente: Boolean);
procedure TAlbaranesClienteReportController.EtiquetasPreview(const AListaID : TIntegerList);
var
AStream: Binary;
AEditor : IEditorAlbaranesClientePreview;
@ -81,7 +81,7 @@ begin
ShowHourglassCursor;
try
AStream := FDataModule.GetEtiquetas(AID, withRefCliente);
AStream := FDataModule.GetEtiquetas(AListaID);
try
CreateEditor('EditorAlbaranesClientePreview', IEditorAlbaranesClientePreview, AEditor);
if Assigned(AEditor) then
@ -100,7 +100,7 @@ begin
end;
end;
procedure TAlbaranesClienteReportController.EtiquetasPrint(const AID: integer; const withRefCliente: Boolean);
procedure TAlbaranesClienteReportController.EtiquetasPrint(const AListaID : TIntegerList);
var
AStream: Binary;
AEditor : IEditorAlbaranesClientePreview;
@ -109,7 +109,7 @@ begin
ShowHourglassCursor;
try
AStream := FDataModule.GetEtiquetas(AID, withRefCliente);
AStream := FDataModule.GetEtiquetas(AListaID);
try
CreateEditor('EditorAlbaranesClientePreview', IEditorAlbaranesClientePreview, AEditor);
if Assigned(AEditor) then

View File

@ -40,7 +40,7 @@ type
const VerPrecios: Boolean = False; const VerRefProveedor: Boolean = False;
const VerObservaciones: Boolean = False; const VerIncidencias: Boolean = False): Binary;
function GetRptWordAlbaran(const AID: Integer): Binary;
function GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
function GetEtiquetas(const ListaID: TIntegerList): Binary;
function GetRptPDFAlbaran(const AID: Integer;
const VerPrecios: Boolean = False; const VerRefProveedor: Boolean = False;
const VerObservaciones: Boolean = False; const VerIncidencias: Boolean = False): Binary;
@ -101,7 +101,7 @@ end;
function TDataModuleAlbaranesCliente.GetRptWordAlbaran(
const AID: Integer): Binary;
begin
Result := (RORemoteService as IsrvAlbaranesCliente).GenerarInformeEnWord(AID)
// Result := (RORemoteService as IsrvAlbaranesCliente).GenerarInformeEnWord(AID)
end;
function TDataModuleAlbaranesCliente.NewItem: IBizAlbaranCliente;
@ -151,9 +151,13 @@ begin
end;
end;
function TDataModuleAlbaranesCliente.GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
function TDataModuleAlbaranesCliente.GetEtiquetas(const ListaID: TIntegerList): Binary;
var
AParam : TIntegerArray;
begin
Result := (RORemoteService as IsrvAlbaranesCliente).GenerarInformeEtiquetas(AID, withRefCliente)
AParam := ListaID.ToIntegerArray;
Result := (RORemoteService as IsrvAlbaranesCliente).GenerarInformeEtiquetas(AParam)
end;
function TDataModuleAlbaranesCliente.GetItem(const ID: Integer): IBizAlbaranCliente;

View File

@ -15,7 +15,7 @@ type
function GetRptPDFAlbaran(const AID: Integer;
const VerPrecios: Boolean = False; const VerRefProveedor: Boolean = False;
const VerObservaciones: Boolean = False; const VerIncidencias: Boolean = False): Binary;
function GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
function GetEtiquetas(const ListaID: TIntegerList): Binary;
end;
implementation

View File

@ -110,7 +110,7 @@ type
procedure RecuperarNombresAgentes;
public
function GenerarEtiquetas(const AID : Integer; withRefCliente: Boolean): Binary;
function GenerarEtiquetas(const ListaID: TIntegerArray): Binary;
function GenerarAlbaran(const AListaID : TIntegerArray; const VerPrecios: Boolean; const VerRefProveedor: Boolean; const VerObservaciones: Boolean;
const VerIncidencias: Boolean): Binary;
function GenerarAlbaranEnPDF(const ListaID : TIntegerArray; const VerPrecios: Boolean; const VerRefProveedor: Boolean; const VerObservaciones: Boolean;
@ -254,20 +254,32 @@ begin
end;
end;
function TRptAlbaranesCliente.GenerarEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
function TRptAlbaranesCliente.GenerarEtiquetas(const ListaID: TIntegerArray): Binary;
var
i: Integer;
AInforme: Variant;
begin
Result := Binary.Create;
//Vamos generando todos y cada uno de los albaranes recibidos
// for i := 0 to ListaID.Count - 1 do
// _GenerarAlbaran(AListaID.Items[i]);
// frxReport.PreviewPages.SaveToStream(Result);
FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
tbl_Cabecera.Active := False;
tbl_Detalles.Active := False;
tbl_Cabecera.ParamByName('ID').AsInteger := AID;
tbl_Detalles.ParamByName('ID_ALBARAN').AsInteger := AID;
tbl_Cabecera.ParamByName('ID').AsInteger := ListaID.Items[0];
tbl_Detalles.ParamByName('ID_ALBARAN').AsInteger := ListaID.Items[0];
tbl_Cabecera.Active := True;
tbl_Detalles.Active := True;
@ -277,10 +289,6 @@ begin
raise Exception.Create (('Error Servidor: GenerarEtiquetas, no encuentra informe ' + rptInforme));
frxReport.LoadFromFile(AInforme, True);
if withRefCliente then
frxReport.Variables.Variables['withRefCliente'] := 1
else
frxReport.Variables.Variables['withRefCliente'] := 0;
frxReport.PrepareReport(False);
frxReport.PreviewPages.SaveToStream(Result);

View File

@ -32,7 +32,7 @@ type
procedure DARemoteServiceCreate(Sender: TObject);
protected
{ IsrvAlbaranesCliente methods }
function GenerarInformeEtiquetas(const ID: Integer; const withRefCliente: Boolean): Binary;
function GenerarInformeEtiquetas(const ListaID: TIntegerArray): Binary;
function GenerarInforme(const ListaID: TIntegerArray; const VerPrecios: Boolean; const VerRefProveedor: Boolean; const VerObservaciones: Boolean;
const VerIncidencias: Boolean): Binary;
function GenerarInformeEnPDF(const ListaID: TIntegerArray; const VerPrecios: Boolean; const VerRefProveedor: Boolean; const VerObservaciones: Boolean;
@ -113,7 +113,7 @@ begin
end;
end;
function TsrvAlbaranesCliente.GenerarInformeEtiquetas(const ID: Integer; const withRefCliente: Boolean): Binary;
function TsrvAlbaranesCliente.GenerarInformeEtiquetas(const ListaID: TIntegerArray): Binary;
var
AReportGenerator : TRptAlbaranesCliente;
begin
@ -121,7 +121,7 @@ begin
AReportGenerator := TRptAlbaranesCliente.Create(nil);
try
Result := AReportGenerator.GenerarEtiquetas(ID, withRefCliente);
Result := AReportGenerator.GenerarEtiquetas(ListaID);
finally
FreeAndNIL(AReportGenerator);
end;

View File

@ -166,26 +166,35 @@ begin
end;
procedure TfEditorAlbaranesCliente.actGenerarEtiquetasExecute(Sender: TObject);
var
AAlbaranes: IBizAlbaranCliente;
AllItems: Boolean;
begin
AAlbaranes := Nil;
AllItems := False;
inherited;
//Miramos si viene de un pedido previo, si no es asi le preguntamos si desea imprimir la referencia del cliente
if (FAlbaranes.ID_PEDIDO > 0) then
FController.EtiquetasPreview(FAlbaranes, True)
else
if MultiSelect and Assigned(ViewGrid) then
AllItems := (ViewGrid.NumSeleccionados > 1);
if AllItems then
begin
if (Application.MessageBox('¿El albarán seleccionado no está asociado a un pedido por internet, ¿desea imprimir la referencia del cliente para las etiquetas de este albarán?', 'Atención', MB_YESNO) = IDYES) then
FController.EtiquetasPreview(FAlbaranes, True)
else
FController.EtiquetasPreview(FAlbaranes, False);
end;
SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Albaranes as ISeleccionable).SelectedRecords);
AAlbaranes := (Controller as IAlbaranesClienteController).ExtraerSeleccionados(Albaranes) as IBizAlbaranCliente;
end
else
AAlbaranes := Albaranes;
if Assigned(AAlbaranes) then
FController.EtiquetasPreview(AAlbaranes, AllItems);
ViewGrid.GotoFirst;
end;
procedure TfEditorAlbaranesCliente.actGenerarEtiquetasUpdate(Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := HayDatos
and not (ViewGrid.NumSeleccionados > 1)
// and not (ViewGrid.NumSeleccionados > 1)
and ViewGrid.esSeleccionCeldaDatos;
end;

View File

@ -102,8 +102,7 @@ function TDataModuleAlbaranesProveedor.GetRptWordAlbaran(const AID: Integer;
const ImprimirPrecio: Boolean = True;
const ImprimirRefProveedor: Boolean = True): Binary;
begin
Result := (RORemoteService as IsrvAlbaranesProveedor).GenerarInformeEnWord(AID,
ImprimirPrecio, ImprimirRefProveedor);
// Result := (RORemoteService as IsrvAlbaranesProveedor).GenerarInformeEnWord(AID, ImprimirPrecio, ImprimirRefProveedor);
end;
function TDataModuleAlbaranesProveedor.NewItem: IBizAlbaranProveedor;

View File

@ -89,10 +89,20 @@ begin
end;
procedure TfEditorArticulo.GuardarInterno;
var
bGuardar: Boolean;
begin
inherited;
FController.Guardar(FArticulo);
Modified := False;
bGuardar := True;
if (FArticulo.ID_PROVEEDOR = 0) then
bGuardar := (Application.MessageBox('El artículo no tiene proveedor asignado, ¿Esta seguro que desea continuar?', 'Atención', MB_YESNO) = IDYES);
if bGuardar then
begin
FController.Guardar(FArticulo);
Modified := False;
end;
end;
procedure TfEditorArticulo.PonerTitulos(const ATitulo: string);

View File

@ -19,7 +19,7 @@ type
function Eliminar(ACliente: IBizContacto; AllItems: Boolean = false): Boolean; overload;
procedure Preview(ACliente : IBizCliente; AllItems: Boolean = false);
procedure Print(ACliente : IBizCliente; AllItems: Boolean = false);
procedure VerPresupuestosDeCliente(ACliente : IBizCliente);
procedure VerPedidosDeCliente(ACliente : IBizCliente);
procedure VerAlbaranesDeCliente(ACliente : IBizCliente);
procedure VerFacturasDeCliente(ACliente : IBizCliente);
procedure VerRecibosDeCliente(ACliente : IBizCliente);
@ -52,7 +52,7 @@ type
function Eliminar(ACliente: IBizContacto; AllItems: Boolean = false): Boolean; overload;
procedure Preview(ACliente : IBizCliente; AllItems: Boolean = false);
procedure Print(ACliente : IBizCliente; AllItems: Boolean = false);
procedure VerPresupuestosDeCliente(ACliente : IBizCliente);
procedure VerPedidosDeCliente(ACliente : IBizCliente);
procedure VerAlbaranesDeCliente(ACliente : IBizCliente);
procedure VerFacturasDeCliente(ACliente : IBizCliente);
procedure VerRecibosDeCliente(ACliente : IBizCliente);
@ -478,22 +478,22 @@ begin
end;
end;
procedure TClientesController.VerPresupuestosDeCliente(ACliente : IBizCliente);
procedure TClientesController.VerPedidosDeCliente(ACliente : IBizCliente);
var
AModule : TModuleController;
APlugin : IMCPresupuestosCliente;
APlugin : IMCPedidosCliente;
begin
if not Assigned(ACliente) then
raise Exception.Create ('Cliente no asignado (VerPresupuestosDeCliente)');
raise Exception.Create ('Cliente no asignado (VerPedidosDeCliente)');
if not ACliente.DataTable.Active then
ACliente.DataTable.Active := True;
AModule := AppFactuGES.GetModule(MODULENAME_PRESUPUESTOS_CLIENTE);
AModule := AppFactuGES.GetModule(MODULENAME_PEDIDOS_CLIENTE);
if Assigned(AModule) then
try
if Supports(AModule, IMCPresupuestosCliente, APlugin) then
APlugin.VerPresupuestos(ACliente.ID, ACliente.NOMBRE);
if Supports(AModule, IMCPedidosCliente, APlugin) then
APlugin.VerPedidos(ACliente.ID, ACliente.NOMBRE);
finally
APlugin := NIL;
end;

View File

@ -82,7 +82,7 @@ inherited fEditorAgente: TfEditorAgente
ImageIndex = 22
Visible = False
object TBXItem36: TTBXItem
Action = actDocumentosPresupuestos
Action = actDocumentosPedidos
end
object TBXItem35: TTBXItem
Action = actDocumentosAlbaranes
@ -114,7 +114,7 @@ inherited fEditorAgente: TfEditorAgente
Caption = 'Documentos relacionados'
ImageIndex = 22
object TBXItem39: TTBXItem
Action = actDocumentosPresupuestos
Action = actDocumentosPedidos
end
object TBXItem38: TTBXItem
Action = actDocumentosAlbaranes
@ -309,8 +309,6 @@ inherited fEditorAgente: TfEditorAgente
inherited frViewClienteDatosBancarios1: TfrViewClienteDatosBancarios
Width = 856
Height = 586
ExplicitLeft = 0
ExplicitTop = 0
ExplicitWidth = 856
ExplicitHeight = 586
inherited dxLayoutControl1: TdxLayoutControl
@ -365,18 +363,6 @@ inherited fEditorAgente: TfEditorAgente
inherited ToolBar1: TToolBar
Width = 856
ExplicitWidth = 856
inherited ToolButton1: TToolButton
ExplicitWidth = 113
end
inherited ToolButton4: TToolButton
ExplicitWidth = 113
end
inherited ToolButton2: TToolButton
ExplicitWidth = 113
end
inherited ToolButton7: TToolButton
ExplicitWidth = 113
end
end
end
end
@ -398,6 +384,18 @@ inherited fEditorAgente: TfEditorAgente
inherited ToolBar1: TToolBar
Width = 856
ExplicitWidth = 856
inherited ToolButton1: TToolButton
ExplicitWidth = 62
end
inherited ToolButton4: TToolButton
ExplicitWidth = 74
end
inherited ToolButton2: TToolButton
ExplicitWidth = 67
end
inherited ToolButton7: TToolButton
ExplicitWidth = 117
end
end
end
end
@ -500,18 +498,6 @@ inherited fEditorAgente: TfEditorAgente
inherited ToolBar1: TToolBar
Width = 856
ExplicitWidth = 856
inherited ToolButton1: TToolButton
ExplicitWidth = 113
end
inherited ToolButton4: TToolButton
ExplicitWidth = 113
end
inherited ToolButton2: TToolButton
ExplicitWidth = 113
end
inherited ToolButton7: TToolButton
ExplicitWidth = 113
end
end
inherited tbxFiltro: TTBXToolbar
Width = 856
@ -550,11 +536,11 @@ inherited fEditorAgente: TfEditorAgente
ImageIndex = 25
OnExecute = actDocumentosFacturasExecute
end
object actDocumentosPresupuestos: TAction
object actDocumentosPedidos: TAction
Category = 'Acciones'
Caption = 'Presupuestos'
Caption = 'Pedidos'
ImageIndex = 23
OnExecute = actDocumentosPresupuestosExecute
OnExecute = actDocumentosPedidosExecute
end
object actDocumentosAlbaranes: TAction
Category = 'Acciones'

View File

@ -28,7 +28,7 @@ type
TBXSubmenuItem3: TTBXSubmenuItem;
TBXItem33: TTBXItem;
TBXSeparatorItem6: TTBXSeparatorItem;
actDocumentosPresupuestos: TAction;
actDocumentosPedidos: TAction;
actDocumentosAlbaranes: TAction;
actDocumentosFacturas: TAction;
TBXSubmenuItem8: TTBXSubmenuItem;
@ -50,7 +50,7 @@ type
procedure FormShow(Sender: TObject);
procedure actGruposClienteExecute(Sender: TObject);
procedure actDocumentosFacturasExecute(Sender: TObject);
procedure actDocumentosPresupuestosExecute(Sender: TObject);
procedure actDocumentosPedidosExecute(Sender: TObject);
procedure actDocumentosAlbaranesExecute(Sender: TObject);
procedure actDocumentosRecibosExecute(Sender: TObject);
@ -88,10 +88,10 @@ begin
(FController as IClientesController).VerFacturasDeCliente(IBizCliente(FContacto));
end;
procedure TfEditorAgente.actDocumentosPresupuestosExecute(Sender: TObject);
procedure TfEditorAgente.actDocumentosPedidosExecute(Sender: TObject);
begin
inherited;
(FController as IClientesController).VerPresupuestosDeCliente(IBizCliente(FContacto));
(FController as IClientesController).VerPedidosDeCliente(IBizCliente(FContacto));
end;
procedure TfEditorAgente.actDocumentosRecibosExecute(Sender: TObject);

View File

@ -72,7 +72,7 @@ inherited fEditorCliente: TfEditorCliente
DropdownCombo = True
ImageIndex = 22
object TBXItem36: TTBXItem
Action = actDocumentosPresupuestos
Action = actDocumentosPedidos
end
object TBXItem35: TTBXItem
Action = actDocumentosAlbaranes
@ -104,7 +104,7 @@ inherited fEditorCliente: TfEditorCliente
Caption = 'Documentos relacionados'
ImageIndex = 22
object TBXItem39: TTBXItem
Action = actDocumentosPresupuestos
Action = actDocumentosPedidos
end
object TBXItem38: TTBXItem
Action = actDocumentosAlbaranes
@ -784,11 +784,11 @@ inherited fEditorCliente: TfEditorCliente
ImageIndex = 25
OnExecute = actDocumentosFacturasExecute
end
object actDocumentosPresupuestos: TAction
object actDocumentosPedidos: TAction
Category = 'Acciones'
Caption = 'Presupuestos'
Caption = 'Pedidos'
ImageIndex = 23
OnExecute = actDocumentosPresupuestosExecute
OnExecute = actDocumentosPedidosExecute
end
object actDocumentosAlbaranes: TAction
Category = 'Acciones'

View File

@ -33,7 +33,7 @@ type
TBXSubmenuItem3: TTBXSubmenuItem;
TBXItem33: TTBXItem;
TBXSeparatorItem6: TTBXSeparatorItem;
actDocumentosPresupuestos: TAction;
actDocumentosPedidos: TAction;
actDocumentosAlbaranes: TAction;
actDocumentosFacturas: TAction;
TBXSubmenuItem8: TTBXSubmenuItem;
@ -50,7 +50,7 @@ type
procedure FormShow(Sender: TObject);
procedure actGruposClienteExecute(Sender: TObject);
procedure actDocumentosFacturasExecute(Sender: TObject);
procedure actDocumentosPresupuestosExecute(Sender: TObject);
procedure actDocumentosPedidosExecute(Sender: TObject);
procedure actDocumentosAlbaranesExecute(Sender: TObject);
procedure actDocumentosRecibosExecute(Sender: TObject);
protected
@ -83,10 +83,10 @@ begin
(FController as IClientesController).VerFacturasDeCliente(IBizCliente(FContacto));
end;
procedure TfEditorCliente.actDocumentosPresupuestosExecute(Sender: TObject);
procedure TfEditorCliente.actDocumentosPedidosExecute(Sender: TObject);
begin
inherited;
(FController as IClientesController).VerPresupuestosDeCliente(IBizCliente(FContacto));
(FController as IClientesController).VerPedidosDeCliente(IBizCliente(FContacto));
end;
procedure TfEditorCliente.actDocumentosRecibosExecute(Sender: TObject);

View File

@ -60,7 +60,7 @@ inherited fEditorClientes: TfEditorClientes
ImageIndex = 24
Images = SmallImages
object TBXItem43: TTBXItem
Action = actDocumentosPresupuestos
Action = actDocumentosPedidos
end
object TBXItem42: TTBXItem
Action = actDocumentosAlbaranes
@ -89,7 +89,7 @@ inherited fEditorClientes: TfEditorClientes
ImageIndex = 24
Images = SmallImages
object TBXItem40: TTBXItem
Action = actDocumentosPresupuestos
Action = actDocumentosPedidos
end
object TBXItem39: TTBXItem
Action = actDocumentosAlbaranes
@ -138,6 +138,19 @@ inherited fEditorClientes: TfEditorClientes
ExplicitWidth = 857
ExplicitHeight = 270
inherited cxGridView: TcxGridDBTableView
DataController.Summary.DefaultGroupSummaryItems = <
item
Format = '0 clientes'
Kind = skCount
Position = spFooter
Column = frViewClientes1.cxGridViewREFERENCIA
end>
DataController.Summary.FooterSummaryItems = <
item
Format = '0 clientes'
Kind = skCount
Column = frViewClientes1.cxGridViewREFERENCIA
end>
end
end
inherited frViewFiltroBase1: TfrViewFiltroBase
@ -254,11 +267,11 @@ inherited fEditorClientes: TfEditorClientes
Enabled = True
Visible = True
end
object actDocumentosPresupuestos: TAction
object actDocumentosPedidos: TAction
Category = 'Acciones'
Caption = 'Presupuestos'
Caption = 'Pedidos'
ImageIndex = 25
OnExecute = actDocumentosPresupuestosExecute
OnExecute = actDocumentosPedidosExecute
OnUpdate = actDocumentosFacturasUpdate
end
object actDocumentosAlbaranes: TAction
@ -2208,7 +2221,7 @@ inherited fEditorClientes: TfEditorClientes
Caption = 'Documentos relacionados'
ImageIndex = 24
object Presupuestos1: TMenuItem
Action = actDocumentosPresupuestos
Action = actDocumentosPedidos
end
object Albaranes1: TMenuItem
Action = actDocumentosAlbaranes

View File

@ -21,7 +21,7 @@ type
actGruposCliente: TAction;
JsListaContactosNoEliminados: TJSDialog;
frViewClientes1: TfrViewClientes;
actDocumentosPresupuestos: TAction;
actDocumentosPedidos: TAction;
actDocumentosAlbaranes: TAction;
actDocumentosFacturas: TAction;
TBXItem381: TTBXItem;
@ -44,7 +44,7 @@ type
TBXItem45: TTBXItem;
procedure actGruposClienteExecute(Sender: TObject);
procedure actDocumentosFacturasUpdate(Sender: TObject);
procedure actDocumentosPresupuestosExecute(Sender: TObject);
procedure actDocumentosPedidosExecute(Sender: TObject);
procedure actDocumentosFacturasExecute(Sender: TObject);
procedure actDocumentosAlbaranesExecute(Sender: TObject);
procedure actDocumentosRecibosExecute(Sender: TObject);
@ -90,10 +90,10 @@ begin
and ViewGrid.EsSeleccionCeldaDatos
end;
procedure TfEditorClientes.actDocumentosPresupuestosExecute(Sender: TObject);
procedure TfEditorClientes.actDocumentosPedidosExecute(Sender: TObject);
begin
inherited;
(FController as IClientesController).VerPresupuestosDeCliente(IBizCliente(FContactos));
(FController as IClientesController).VerPedidosDeCliente(IBizCliente(FContactos));
end;
procedure TfEditorClientes.actDocumentosRecibosExecute(Sender: TObject);

View File

@ -81,7 +81,7 @@ end;
function TDataModuleFacturasCliente.GetRptWordFactura(const AID: Integer; const VerSello: Boolean = True): Binary;
begin
Result := (RORemoteService as IsrvFacturasCliente).GenerarInformeEnWord(AID, VerSello)
// Result := (RORemoteService as IsrvFacturasCliente).GenerarInformeEnWord(AID, VerSello)
end;
function TDataModuleFacturasCliente.NewItem: IBizFacturaCliente;

View File

@ -14,4 +14,4 @@ END
/* C:\Codigo\Source\Modulos\Informe margen por articulo\Data\uDataModuleInfMargenArticulo.dfm */
/* C:\Codigo\Source\Modulos\Informe margen por articulo\Data\InfMargenArticulo_data.res */
/* c:\temp\dtf98.tmp */
/* c:\temp\dtf843.tmp */

View File

@ -13,4 +13,4 @@ BEGIN
END
/* C:\Codigo\Source\Modulos\Informe margen por articulo\Model\InfMargenArticulo_model.res */
/* c:\temp\dtf96.tmp */
/* c:\temp\dtf841.tmp */

View File

@ -16,4 +16,4 @@ END
/* C:\Codigo\Source\Modulos\Informe margen por articulo\Views\uViewInfMargenArticulo.dfm */
/* C:\Codigo\Source\Modulos\Informe margen por articulo\Views\uEditorInfMargenArticulo.dfm */
/* C:\Codigo\Source\Modulos\Informe margen por articulo\Views\InfMargenArticulo_view.res */
/* c:\temp\dtf9C.tmp */
/* c:\temp\dtf847.tmp */

View File

@ -14,4 +14,4 @@ END
/* C:\Codigo\Source\Modulos\Informe ventas por articulo\Data\uDataModuleInfVentasArticulo.dfm */
/* C:\Codigo\Source\Modulos\Informe ventas por articulo\Data\InfVentasArticulo_data.res */
/* c:\temp\dtf8E.tmp */
/* c:\temp\dtf839.tmp */

View File

@ -13,4 +13,4 @@ BEGIN
END
/* C:\Codigo\Source\Modulos\Informe ventas por articulo\Model\InfVentasArticulo_model.res */
/* c:\temp\dtf8C.tmp */
/* c:\temp\dtf837.tmp */

View File

@ -19,4 +19,4 @@ END
/* C:\Codigo\Source\Modulos\Informe ventas por articulo\Views\uViewInfVentasAlbArticulo.dfm */
/* C:\Codigo\Source\Modulos\Informe ventas por articulo\Views\uEditorInfVentasAlbArticulo.dfm */
/* C:\Codigo\Source\Modulos\Informe ventas por articulo\Views\InfVentasArticulo_view.res */
/* c:\temp\dtf92.tmp */
/* c:\temp\dtf83D.tmp */

View File

@ -13,4 +13,4 @@ BEGIN
END
/* C:\Codigo\Source\Modulos\Informes base\Controller\InformesBase_controller.res */
/* c:\temp\dtf82.tmp */
/* c:\temp\dtf82D.tmp */

View File

@ -14,4 +14,4 @@ END
/* C:\Codigo\Source\Modulos\Informes base\Data\uDataModuleInformes.dfm */
/* C:\Codigo\Source\Modulos\Informes base\Data\Informes_data.res */
/* c:\temp\dtf7E.tmp */
/* c:\temp\dtf829.tmp */

View File

@ -13,4 +13,4 @@ BEGIN
END
/* C:\Codigo\Source\Modulos\Informes base\Model\Informes_model.res */
/* c:\temp\dtf7C.tmp */
/* c:\temp\dtf827.tmp */

View File

@ -15,4 +15,4 @@ END
/* C:\Codigo\Source\Modulos\Informes base\Views\uViewInformes.dfm */
/* C:\Codigo\Source\Modulos\Informes base\Views\uEditorInformes.dfm */
/* C:\Codigo\Source\Modulos\Informes base\Views\Informes_view.res */
/* c:\temp\dtf86.tmp */
/* c:\temp\dtf831.tmp */

View File

@ -234,6 +234,11 @@ inherited DataModulePedidosProveedor: TDataModulePedidosProveedor
ServerAutoRefresh = True
DictionaryEntry = 'PedidosProveedor_REF_PED_CLIENTE'
end
item
Name = 'REFERENCIA_CLIENTE'
DataType = datString
Size = 255
end
item
Name = 'IMPORTE_NETO'
DataType = datCurrency

View File

@ -111,8 +111,8 @@ function TDataModulePedidosProveedor.GetRptWordPedido(
const AID: Integer; const ImprimirPrecio: Boolean = True;
const ImprimirRefProveedor: Boolean = True): Binary;
begin
Result := (RORemoteService as IsrvPedidosProveedor).GenerarInformeEnWord(AID,
ImprimirPrecio, ImprimirRefProveedor);
// Result := (RORemoteService as IsrvPedidosProveedor).GenerarInformeEnWord(AID,
// ImprimirPrecio, ImprimirRefProveedor);
end;
function TDataModulePedidosProveedor.NewItem: IBizPedidoProveedor;

View File

@ -9,10 +9,10 @@ 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_ListaAnosPedidos = '{0CF426F5-0E7A-4D31-B771-4F0EB05D0996}';
RID_PedidosProveedor = '{B9580F94-5437-478A-90F5-3D27A6CFFDA1}';
RID_PedidosProveedor_Detalles = '{0A1F339A-A148-4057-B7E2-89076A2F465F}';
RID_PedidosProveedor_Articulos_Pendientes = '{D6F47337-9293-44B1-BFFA-48F19BD0E00E}';
RID_ListaAnosPedidos = '{635625C8-D72D-4D12-9B57-638A5788C270}';
RID_PedidosProveedor = '{58CBD283-42B3-4063-8975-7B6FA85D1830}';
RID_PedidosProveedor_Detalles = '{4B8364C5-2E99-499C-A908-A481EA53196E}';
RID_PedidosProveedor_Articulos_Pendientes = '{216A742F-57E6-4005-83DC-AFFD66A523AD}';
{ Data table names }
nme_ListaAnosPedidos = 'ListaAnosPedidos';
@ -59,6 +59,7 @@ const
fld_PedidosProveedorUSUARIO = 'USUARIO';
fld_PedidosProveedorID_PEDIDO_CLIENTE = 'ID_PEDIDO_CLIENTE';
fld_PedidosProveedorREF_PED_CLIENTE = 'REF_PED_CLIENTE';
fld_PedidosProveedorREFERENCIA_CLIENTE = 'REFERENCIA_CLIENTE';
fld_PedidosProveedorIMPORTE_NETO = 'IMPORTE_NETO';
fld_PedidosProveedorIMPORTE_PORTE = 'IMPORTE_PORTE';
fld_PedidosProveedorDESCUENTO = 'DESCUENTO';
@ -105,18 +106,19 @@ const
idx_PedidosProveedorUSUARIO = 29;
idx_PedidosProveedorID_PEDIDO_CLIENTE = 30;
idx_PedidosProveedorREF_PED_CLIENTE = 31;
idx_PedidosProveedorIMPORTE_NETO = 32;
idx_PedidosProveedorIMPORTE_PORTE = 33;
idx_PedidosProveedorDESCUENTO = 34;
idx_PedidosProveedorIMPORTE_DESCUENTO = 35;
idx_PedidosProveedorBASE_IMPONIBLE = 36;
idx_PedidosProveedorIVA = 37;
idx_PedidosProveedorIMPORTE_IVA = 38;
idx_PedidosProveedorID_FORMA_PAGO = 39;
idx_PedidosProveedorID_FACTURA = 40;
idx_PedidosProveedorREF_FACTURA_PROV = 41;
idx_PedidosProveedorNUM_COPIAS = 42;
idx_PedidosProveedorNUM_CORREOS = 43;
idx_PedidosProveedorREFERENCIA_CLIENTE = 32;
idx_PedidosProveedorIMPORTE_NETO = 33;
idx_PedidosProveedorIMPORTE_PORTE = 34;
idx_PedidosProveedorDESCUENTO = 35;
idx_PedidosProveedorIMPORTE_DESCUENTO = 36;
idx_PedidosProveedorBASE_IMPONIBLE = 37;
idx_PedidosProveedorIVA = 38;
idx_PedidosProveedorIMPORTE_IVA = 39;
idx_PedidosProveedorID_FORMA_PAGO = 40;
idx_PedidosProveedorID_FACTURA = 41;
idx_PedidosProveedorREF_FACTURA_PROV = 42;
idx_PedidosProveedorNUM_COPIAS = 43;
idx_PedidosProveedorNUM_CORREOS = 44;
{ PedidosProveedor_Detalles fields }
fld_PedidosProveedor_DetallesID = 'ID';
@ -173,7 +175,7 @@ const
type
{ IListaAnosPedidos }
IListaAnosPedidos = interface(IDAStronglyTypedDataTable)
['{B738AA83-D8BD-4C38-98CD-DD28E31C9858}']
['{908891AE-AD5B-4BE0-9B4A-E7DC5049478B}']
{ Property getters and setters }
function GetANOValue: String;
procedure SetANOValue(const aValue: String);
@ -208,7 +210,7 @@ type
{ IPedidosProveedor }
IPedidosProveedor = interface(IDAStronglyTypedDataTable)
['{78E9FF8F-05A2-4515-9C75-BB069DAF094B}']
['{0FDFA1C6-129E-4578-B028-76E752BCB8CF}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@ -336,6 +338,10 @@ type
procedure SetREF_PED_CLIENTEValue(const aValue: String);
function GetREF_PED_CLIENTEIsNull: Boolean;
procedure SetREF_PED_CLIENTEIsNull(const aValue: Boolean);
function GetREFERENCIA_CLIENTEValue: String;
procedure SetREFERENCIA_CLIENTEValue(const aValue: String);
function GetREFERENCIA_CLIENTEIsNull: Boolean;
procedure SetREFERENCIA_CLIENTEIsNull(const aValue: Boolean);
function GetIMPORTE_NETOValue: Currency;
procedure SetIMPORTE_NETOValue(const aValue: Currency);
function GetIMPORTE_NETOIsNull: Boolean;
@ -451,6 +457,8 @@ type
property ID_PEDIDO_CLIENTEIsNull: Boolean read GetID_PEDIDO_CLIENTEIsNull write SetID_PEDIDO_CLIENTEIsNull;
property REF_PED_CLIENTE: String read GetREF_PED_CLIENTEValue write SetREF_PED_CLIENTEValue;
property REF_PED_CLIENTEIsNull: Boolean read GetREF_PED_CLIENTEIsNull write SetREF_PED_CLIENTEIsNull;
property REFERENCIA_CLIENTE: String read GetREFERENCIA_CLIENTEValue write SetREFERENCIA_CLIENTEValue;
property REFERENCIA_CLIENTEIsNull: Boolean read GetREFERENCIA_CLIENTEIsNull write SetREFERENCIA_CLIENTEIsNull;
property IMPORTE_NETO: Currency read GetIMPORTE_NETOValue write SetIMPORTE_NETOValue;
property IMPORTE_NETOIsNull: Boolean read GetIMPORTE_NETOIsNull write SetIMPORTE_NETOIsNull;
property IMPORTE_PORTE: Currency read GetIMPORTE_PORTEValue write SetIMPORTE_PORTEValue;
@ -612,6 +620,10 @@ type
procedure SetREF_PED_CLIENTEValue(const aValue: String); virtual;
function GetREF_PED_CLIENTEIsNull: Boolean; virtual;
procedure SetREF_PED_CLIENTEIsNull(const aValue: Boolean); virtual;
function GetREFERENCIA_CLIENTEValue: String; virtual;
procedure SetREFERENCIA_CLIENTEValue(const aValue: String); virtual;
function GetREFERENCIA_CLIENTEIsNull: Boolean; virtual;
procedure SetREFERENCIA_CLIENTEIsNull(const aValue: Boolean); virtual;
function GetIMPORTE_NETOValue: Currency; virtual;
procedure SetIMPORTE_NETOValue(const aValue: Currency); virtual;
function GetIMPORTE_NETOIsNull: Boolean; virtual;
@ -726,6 +738,8 @@ type
property ID_PEDIDO_CLIENTEIsNull: Boolean read GetID_PEDIDO_CLIENTEIsNull write SetID_PEDIDO_CLIENTEIsNull;
property REF_PED_CLIENTE: String read GetREF_PED_CLIENTEValue write SetREF_PED_CLIENTEValue;
property REF_PED_CLIENTEIsNull: Boolean read GetREF_PED_CLIENTEIsNull write SetREF_PED_CLIENTEIsNull;
property REFERENCIA_CLIENTE: String read GetREFERENCIA_CLIENTEValue write SetREFERENCIA_CLIENTEValue;
property REFERENCIA_CLIENTEIsNull: Boolean read GetREFERENCIA_CLIENTEIsNull write SetREFERENCIA_CLIENTEIsNull;
property IMPORTE_NETO: Currency read GetIMPORTE_NETOValue write SetIMPORTE_NETOValue;
property IMPORTE_NETOIsNull: Boolean read GetIMPORTE_NETOIsNull write SetIMPORTE_NETOIsNull;
property IMPORTE_PORTE: Currency read GetIMPORTE_PORTEValue write SetIMPORTE_PORTEValue;
@ -759,7 +773,7 @@ type
{ IPedidosProveedor_Detalles }
IPedidosProveedor_Detalles = interface(IDAStronglyTypedDataTable)
['{E2F0E04D-0D79-474B-A2E9-32934B613F97}']
['{15F9DCB0-65A0-49DF-A820-EAC0A86FC9A8}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@ -974,7 +988,7 @@ type
{ IPedidosProveedor_Articulos_Pendientes }
IPedidosProveedor_Articulos_Pendientes = interface(IDAStronglyTypedDataTable)
['{7F61AF69-4E60-41A2-9429-E67F707C289C}']
['{FCC15986-D146-4D07-9E5E-ACFDE2998EC9}']
{ Property getters and setters }
function GetID_PEDIDOValue: Integer;
procedure SetID_PEDIDOValue(const aValue: Integer);
@ -1799,6 +1813,27 @@ begin
DataTable.Fields[idx_PedidosProveedorREF_PED_CLIENTE].AsVariant := Null;
end;
function TPedidosProveedorDataTableRules.GetREFERENCIA_CLIENTEValue: String;
begin
result := DataTable.Fields[idx_PedidosProveedorREFERENCIA_CLIENTE].AsString;
end;
procedure TPedidosProveedorDataTableRules.SetREFERENCIA_CLIENTEValue(const aValue: String);
begin
DataTable.Fields[idx_PedidosProveedorREFERENCIA_CLIENTE].AsString := aValue;
end;
function TPedidosProveedorDataTableRules.GetREFERENCIA_CLIENTEIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidosProveedorREFERENCIA_CLIENTE].IsNull;
end;
procedure TPedidosProveedorDataTableRules.SetREFERENCIA_CLIENTEIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidosProveedorREFERENCIA_CLIENTE].AsVariant := Null;
end;
function TPedidosProveedorDataTableRules.GetIMPORTE_NETOValue: Currency;
begin
result := DataTable.Fields[idx_PedidosProveedorIMPORTE_NETO].AsCurrency;

View File

@ -9,15 +9,15 @@ 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_ListaAnosPedidosDelta = '{70208471-680B-41B3-AB3C-0DC5FCD26D51}';
RID_PedidosProveedorDelta = '{CB41A028-BDED-41AB-9C88-A581E3DE6CCC}';
RID_PedidosProveedor_DetallesDelta = '{0CE5E016-2EBE-4452-9E33-C5BC9A358EF8}';
RID_PedidosProveedor_Articulos_PendientesDelta = '{7DB1761B-D15F-4075-9CB7-14F89144CD43}';
RID_ListaAnosPedidosDelta = '{FDE726DF-381E-4F3C-8A65-08F25374E75C}';
RID_PedidosProveedorDelta = '{4AEABC2F-78CA-45F0-86FE-776F7D3D2D73}';
RID_PedidosProveedor_DetallesDelta = '{CDC0D46D-13EA-41FE-8DA2-3434BC0FBE51}';
RID_PedidosProveedor_Articulos_PendientesDelta = '{37F1083E-ECCD-488C-8A48-C3A20099E8E4}';
type
{ IListaAnosPedidosDelta }
IListaAnosPedidosDelta = interface(IListaAnosPedidos)
['{70208471-680B-41B3-AB3C-0DC5FCD26D51}']
['{FDE726DF-381E-4F3C-8A65-08F25374E75C}']
{ Property getters and setters }
function GetOldANOValue : String;
@ -51,7 +51,7 @@ type
{ IPedidosProveedorDelta }
IPedidosProveedorDelta = interface(IPedidosProveedor)
['{CB41A028-BDED-41AB-9C88-A581E3DE6CCC}']
['{4AEABC2F-78CA-45F0-86FE-776F7D3D2D73}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer;
@ -85,6 +85,7 @@ type
function GetOldUSUARIOValue : String;
function GetOldID_PEDIDO_CLIENTEValue : Integer;
function GetOldREF_PED_CLIENTEValue : String;
function GetOldREFERENCIA_CLIENTEValue : String;
function GetOldIMPORTE_NETOValue : Currency;
function GetOldIMPORTE_PORTEValue : Currency;
function GetOldDESCUENTOValue : Float;
@ -131,6 +132,7 @@ type
property OldUSUARIO : String read GetOldUSUARIOValue;
property OldID_PEDIDO_CLIENTE : Integer read GetOldID_PEDIDO_CLIENTEValue;
property OldREF_PED_CLIENTE : String read GetOldREF_PED_CLIENTEValue;
property OldREFERENCIA_CLIENTE : String read GetOldREFERENCIA_CLIENTEValue;
property OldIMPORTE_NETO : Currency read GetOldIMPORTE_NETOValue;
property OldIMPORTE_PORTE : Currency read GetOldIMPORTE_PORTEValue;
property OldDESCUENTO : Float read GetOldDESCUENTOValue;
@ -344,6 +346,12 @@ type
function GetOldREF_PED_CLIENTEIsNull: Boolean; virtual;
procedure SetREF_PED_CLIENTEValue(const aValue: String); virtual;
procedure SetREF_PED_CLIENTEIsNull(const aValue: Boolean); virtual;
function GetREFERENCIA_CLIENTEValue: String; virtual;
function GetREFERENCIA_CLIENTEIsNull: Boolean; virtual;
function GetOldREFERENCIA_CLIENTEValue: String; virtual;
function GetOldREFERENCIA_CLIENTEIsNull: Boolean; virtual;
procedure SetREFERENCIA_CLIENTEValue(const aValue: String); virtual;
procedure SetREFERENCIA_CLIENTEIsNull(const aValue: Boolean); virtual;
function GetIMPORTE_NETOValue: Currency; virtual;
function GetIMPORTE_NETOIsNull: Boolean; virtual;
function GetOldIMPORTE_NETOValue: Currency; virtual;
@ -546,6 +554,10 @@ type
property REF_PED_CLIENTEIsNull : Boolean read GetREF_PED_CLIENTEIsNull write SetREF_PED_CLIENTEIsNull;
property OldREF_PED_CLIENTE : String read GetOldREF_PED_CLIENTEValue;
property OldREF_PED_CLIENTEIsNull : Boolean read GetOldREF_PED_CLIENTEIsNull;
property REFERENCIA_CLIENTE : String read GetREFERENCIA_CLIENTEValue write SetREFERENCIA_CLIENTEValue;
property REFERENCIA_CLIENTEIsNull : Boolean read GetREFERENCIA_CLIENTEIsNull write SetREFERENCIA_CLIENTEIsNull;
property OldREFERENCIA_CLIENTE : String read GetOldREFERENCIA_CLIENTEValue;
property OldREFERENCIA_CLIENTEIsNull : Boolean read GetOldREFERENCIA_CLIENTEIsNull;
property IMPORTE_NETO : Currency read GetIMPORTE_NETOValue write SetIMPORTE_NETOValue;
property IMPORTE_NETOIsNull : Boolean read GetIMPORTE_NETOIsNull write SetIMPORTE_NETOIsNull;
property OldIMPORTE_NETO : Currency read GetOldIMPORTE_NETOValue;
@ -603,7 +615,7 @@ type
{ IPedidosProveedor_DetallesDelta }
IPedidosProveedor_DetallesDelta = interface(IPedidosProveedor_Detalles)
['{0CE5E016-2EBE-4452-9E33-C5BC9A358EF8}']
['{CDC0D46D-13EA-41FE-8DA2-3434BC0FBE51}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_PEDIDOValue : Integer;
@ -817,7 +829,7 @@ type
{ IPedidosProveedor_Articulos_PendientesDelta }
IPedidosProveedor_Articulos_PendientesDelta = interface(IPedidosProveedor_Articulos_Pendientes)
['{7DB1761B-D15F-4075-9CB7-14F89144CD43}']
['{37F1083E-ECCD-488C-8A48-C3A20099E8E4}']
{ Property getters and setters }
function GetOldID_PEDIDOValue : Integer;
function GetOldREFERENCIAValue : String;
@ -1974,6 +1986,37 @@ begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosProveedorREF_PED_CLIENTE] := Null;
end;
function TPedidosProveedorBusinessProcessorRules.GetREFERENCIA_CLIENTEValue: String;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosProveedorREFERENCIA_CLIENTE];
end;
function TPedidosProveedorBusinessProcessorRules.GetREFERENCIA_CLIENTEIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosProveedorREFERENCIA_CLIENTE]);
end;
function TPedidosProveedorBusinessProcessorRules.GetOldREFERENCIA_CLIENTEValue: String;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidosProveedorREFERENCIA_CLIENTE];
end;
function TPedidosProveedorBusinessProcessorRules.GetOldREFERENCIA_CLIENTEIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidosProveedorREFERENCIA_CLIENTE]);
end;
procedure TPedidosProveedorBusinessProcessorRules.SetREFERENCIA_CLIENTEValue(const aValue: String);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosProveedorREFERENCIA_CLIENTE] := aValue;
end;
procedure TPedidosProveedorBusinessProcessorRules.SetREFERENCIA_CLIENTEIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosProveedorREFERENCIA_CLIENTE] := Null;
end;
function TPedidosProveedorBusinessProcessorRules.GetIMPORTE_NETOValue: Currency;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosProveedorIMPORTE_NETO];

View File

@ -222,6 +222,10 @@ object srvPedidosProveedor: TsrvPedidosProveedor
item
DatasetField = 'NUM_CORREOS'
TableField = 'NUM_CORREOS'
end
item
DatasetField = 'REFERENCIA_CLIENTE'
TableField = 'REFERENCIA_CLIENTE'
end>
end>
Name = 'PedidosProveedor'
@ -409,6 +413,11 @@ object srvPedidosProveedor: TsrvPedidosProveedor
ServerAutoRefresh = True
DictionaryEntry = 'PedidosProveedor_REF_PED_CLIENTE'
end
item
Name = 'REFERENCIA_CLIENTE'
DataType = datString
Size = 255
end
item
Name = 'IMPORTE_NETO'
DataType = datCurrency
@ -765,10 +774,6 @@ object srvPedidosProveedor: TsrvPedidosProveedor
end
item
Params = <
item
Name = 'PERSONA_CONTACTO_PROV'
Value = ''
end
item
Name = 'ID'
DataType = datAutoInc
@ -777,126 +782,177 @@ object srvPedidosProveedor: TsrvPedidosProveedor
end
item
Name = 'ID_EMPRESA'
DataType = datInteger
Value = ''
end
item
Name = 'ID_PROVEEDOR'
DataType = datInteger
Value = ''
end
item
Name = 'ID_DIRECCION'
DataType = datInteger
Value = ''
end
item
Name = 'PERSONA_CONTACTO_PROV'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'REFERENCIA'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'FECHA_PEDIDO'
DataType = datDateTime
Value = ''
end
item
Name = 'FECHA_CONFIRMACION'
DataType = datDateTime
Value = ''
end
item
Name = 'FECHA_ENTREGA'
DataType = datDateTime
Value = ''
end
item
Name = 'ID_ALMACEN'
DataType = datInteger
Value = ''
end
item
Name = 'ID_OBRA'
DataType = datInteger
Value = ''
end
item
Name = 'OBSERVACIONES'
DataType = datMemo
Value = ''
end
item
Name = 'INCIDENCIAS'
DataType = datMemo
Value = ''
end
item
Name = 'INCIDENCIAS_ACTIVAS'
DataType = datSmallInt
Value = ''
end
item
Name = 'CALLE'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'CODIGO_POSTAL'
DataType = datString
Size = 10
Value = ''
end
item
Name = 'POBLACION'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'PROVINCIA'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'PERSONA_CONTACTO'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'TELEFONO'
DataType = datString
Size = 25
Value = ''
end
item
Name = 'ID_PEDIDO_CLIENTE'
DataType = datInteger
Value = ''
end
item
Name = 'IMPORTE_NETO'
DataType = datCurrency
Value = ''
end
item
Name = 'IMPORTE_PORTE'
DataType = datCurrency
Value = ''
end
item
Name = 'DESCUENTO'
DataType = datFloat
Value = ''
end
item
Name = 'IMPORTE_DESCUENTO'
DataType = datCurrency
Value = ''
end
item
Name = 'BASE_IMPONIBLE'
DataType = datCurrency
Value = ''
end
item
Name = 'IVA'
DataType = datFloat
Value = ''
end
item
Name = 'IMPORTE_IVA'
DataType = datCurrency
Value = ''
end
item
Name = 'IMPORTE_TOTAL'
DataType = datCurrency
Value = ''
end
item
Name = 'ID_FORMA_PAGO'
DataType = datInteger
Value = ''
end
item
Name = 'FECHA_ENVIO'
DataType = datDateTime
Value = ''
end
item
Name = 'USUARIO'
DataType = datString
Size = 30
Value = ''
end
item
Name = 'ID_FACTURA'
DataType = datInteger
Value = ''
end
item
Name = 'REFERENCIA_CLIENTE'
DataType = datString
Size = 255
Value = ''
end>
Statements = <
@ -912,15 +968,16 @@ object srvPedidosProveedor: TsrvPedidosProveedor
'EFONO, ID_PEDIDO_CLIENTE,'#10' IMPORTE_NETO, IMPORTE_PORTE, DESC' +
'UENTO, IMPORTE_DESCUENTO,'#10' BASE_IMPONIBLE, IVA, IMPORTE_IVA,' +
' IMPORTE_TOTAL, ID_FORMA_PAGO,'#10' FECHA_ENVIO, USUARIO, FECHA_' +
'ALTA, ID_FACTURA)'#10' VALUES'#10' (:ID, :ID_EMPRESA, :ID_PROVEEDOR,' +
' :ID_DIRECCION,'#10' :PERSONA_CONTACTO_PROV, :REFERENCIA, :FECHA' +
'_PEDIDO,'#10' :FECHA_CONFIRMACION, :FECHA_ENTREGA, :ID_ALMACEN, ' +
':ID_OBRA,'#10' :OBSERVACIONES, :INCIDENCIAS, :INCIDENCIAS_ACTIVA' +
'S,'#10' :CALLE, :CODIGO_POSTAL, :POBLACION, :PROVINCIA, :PERSONA' +
'_CONTACTO,'#10' :TELEFONO, :ID_PEDIDO_CLIENTE, :IMPORTE_NETO, :I' +
'MPORTE_PORTE,'#10' :DESCUENTO, :IMPORTE_DESCUENTO, :BASE_IMPONIB' +
'LE, :IVA,'#10' :IMPORTE_IVA, :IMPORTE_TOTAL, :ID_FORMA_PAGO, :FE' +
'CHA_ENVIO,'#10' :USUARIO, CURRENT_TIMESTAMP, :ID_FACTURA)'#10
'ALTA, ID_FACTURA, REFERENCIA_CLIENTE)'#10' VALUES'#10' (:ID, :ID_EMP' +
'RESA, :ID_PROVEEDOR, :ID_DIRECCION,'#10' :PERSONA_CONTACTO_PROV,' +
' :REFERENCIA, :FECHA_PEDIDO,'#10' :FECHA_CONFIRMACION, :FECHA_EN' +
'TREGA, :ID_ALMACEN, :ID_OBRA,'#10' :OBSERVACIONES, :INCIDENCIAS,' +
' :INCIDENCIAS_ACTIVAS,'#10' :CALLE, :CODIGO_POSTAL, :POBLACION, ' +
':PROVINCIA, :PERSONA_CONTACTO,'#10' :TELEFONO, :ID_PEDIDO_CLIENT' +
'E, :IMPORTE_NETO, :IMPORTE_PORTE,'#10' :DESCUENTO, :IMPORTE_DESC' +
'UENTO, :BASE_IMPONIBLE, :IVA,'#10' :IMPORTE_IVA, :IMPORTE_TOTAL,' +
' :ID_FORMA_PAGO, :FECHA_ENVIO,'#10' :USUARIO, CURRENT_TIMESTAMP,' +
' :ID_FACTURA, :REFERENCIA_CLIENTE)'#10
StatementType = stSQL
ColumnMappings = <>
end>
@ -928,10 +985,6 @@ object srvPedidosProveedor: TsrvPedidosProveedor
end
item
Params = <
item
Name = 'PERSONA_CONTACTO_PROV'
Value = ''
end
item
Name = 'ID'
DataType = datAutoInc
@ -940,126 +993,177 @@ object srvPedidosProveedor: TsrvPedidosProveedor
end
item
Name = 'OBSERVACIONES'
DataType = datMemo
Value = ''
end
item
Name = 'REFERENCIA'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'ID_EMPRESA'
DataType = datInteger
Value = ''
end
item
Name = 'ID_PROVEEDOR'
DataType = datInteger
Value = ''
end
item
Name = 'ID_DIRECCION'
DataType = datInteger
Value = ''
end
item
Name = 'PERSONA_CONTACTO_PROV'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'FECHA_ENVIO'
DataType = datDateTime
Value = ''
end
item
Name = 'FECHA_PEDIDO'
DataType = datDateTime
Value = ''
end
item
Name = 'FECHA_CONFIRMACION'
DataType = datDateTime
Value = ''
end
item
Name = 'FECHA_ENTREGA'
DataType = datDateTime
Value = ''
end
item
Name = 'INCIDENCIAS'
DataType = datMemo
Value = ''
end
item
Name = 'IMPORTE_TOTAL'
DataType = datCurrency
Value = ''
end
item
Name = 'INCIDENCIAS_ACTIVAS'
DataType = datSmallInt
Value = ''
end
item
Name = 'ID_ALMACEN'
DataType = datInteger
Value = ''
end
item
Name = 'ID_OBRA'
DataType = datInteger
Value = ''
end
item
Name = 'CALLE'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'POBLACION'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'PROVINCIA'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'CODIGO_POSTAL'
DataType = datString
Size = 10
Value = ''
end
item
Name = 'PERSONA_CONTACTO'
DataType = datString
Size = 255
Value = ''
end
item
Name = 'TELEFONO'
DataType = datString
Size = 25
Value = ''
end
item
Name = 'ID_PEDIDO_CLIENTE'
DataType = datInteger
Value = ''
end
item
Name = 'IMPORTE_NETO'
DataType = datCurrency
Value = ''
end
item
Name = 'IMPORTE_PORTE'
DataType = datCurrency
Value = ''
end
item
Name = 'DESCUENTO'
DataType = datFloat
Value = ''
end
item
Name = 'IMPORTE_DESCUENTO'
DataType = datCurrency
Value = ''
end
item
Name = 'BASE_IMPONIBLE'
DataType = datCurrency
Value = ''
end
item
Name = 'IVA'
DataType = datFloat
Value = ''
end
item
Name = 'IMPORTE_IVA'
DataType = datCurrency
Value = ''
end
item
Name = 'ID_FORMA_PAGO'
DataType = datInteger
Value = ''
end
item
Name = 'USUARIO'
DataType = datString
Size = 30
Value = ''
end
item
Name = 'ID_FACTURA'
DataType = datInteger
Value = ''
end
item
Name = 'REFERENCIA_CLIENTE'
DataType = datString
Size = 255
Value = ''
end
item
@ -1089,7 +1193,8 @@ object srvPedidosProveedor: TsrvPedidosProveedor
', '#10' BASE_IMPONIBLE = :BASE_IMPONIBLE, '#10' IVA = :IVA, '#10' I' +
'MPORTE_IVA = :IMPORTE_IVA, '#10' ID_FORMA_PAGO = :ID_FORMA_PAGO,'#10 +
' USUARIO = :USUARIO,'#10' FECHA_MODIFICACION = CURRENT_TIMESTA' +
'MP,'#10' ID_FACTURA = :ID_FACTURA'#10' WHERE'#10' (ID = :OLD_ID)'#10
'MP,'#10' ID_FACTURA = :ID_FACTURA,'#10' REFERENCIA_CLIENTE = :REFE' +
'RENCIA_CLIENTE'#10' WHERE'#10' (ID = :OLD_ID)'#10
StatementType = stSQL
ColumnMappings = <>
end>

View File

@ -188,7 +188,8 @@ end;
procedure TfEditorPedidosProveedor.actRecibirPedidoExecute(Sender: TObject);
begin
inherited;
RecibirPedidoProv(FPedidos);
GenerarAlbaranProv(FPedidos);
// RecibirPedidoProv(FPedidos);
actRefrescar.Execute;
end;

View File

@ -67,7 +67,7 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.SkinName = ''
TabOrder = 7
TabOrder = 8
Width = 344
end
object edtFechaEntrega: TcxDBDateEdit
@ -90,11 +90,11 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.SkinName = ''
TabOrder = 8
TabOrder = 9
Width = 344
end
object memObservaciones: TcxDBMemo
Left = 488
Left = 605
Top = 265
Anchors = [akLeft, akTop, akRight, akBottom]
DataBinding.DataField = 'OBSERVACIONES'
@ -111,7 +111,7 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.SkinName = ''
TabOrder = 11
TabOrder = 12
Height = 200
Width = 459
end
@ -152,7 +152,7 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
TabOrder = 9
TabOrder = 10
ReadOnly = False
ExplicitLeft = 22
ExplicitTop = 279
@ -189,9 +189,9 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
Width = 551
end
inherited bModificar: TBitBtn
Left = 298
Left = 415
Top = 161
ExplicitLeft = 298
ExplicitLeft = 415
ExplicitTop = 161
end
inherited txtDireccion: TStaticText
@ -274,7 +274,7 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
Width = 195
end
object bFormasPago: TButton
Left = 326
Left = 443
Top = 82
Width = 132
Height = 21
@ -304,7 +304,7 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.SkinName = ''
TabOrder = 6
TabOrder = 7
Width = 344
end
object eReferenciaPedidoCli: TcxTextEdit
@ -335,15 +335,15 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
Width = 195
end
object bVerPedidoCliente: TButton
Left = 326
Left = 443
Top = 109
Width = 132
Height = 23
Action = actVerPedidoCli
TabOrder = 5
TabOrder = 6
end
inline frViewObraReserva1: TfrViewObraReserva
Left = 488
Left = 605
Top = 441
Width = 422
Height = 97
@ -353,9 +353,9 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
TabOrder = 12
TabOrder = 13
ReadOnly = False
ExplicitLeft = 488
ExplicitLeft = 605
ExplicitTop = 441
ExplicitWidth = 422
ExplicitHeight = 97
@ -390,7 +390,7 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
end
end
inline frViewDatosYSeleccionProveedorPedido1: TfrViewDatosYSeleccionProveedorPedido
Left = 488
Left = 605
Top = 28
Width = 480
Height = 201
@ -400,9 +400,9 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
TabOrder = 10
TabOrder = 11
ReadOnly = False
ExplicitLeft = 488
ExplicitLeft = 605
ExplicitTop = 28
ExplicitWidth = 480
ExplicitHeight = 201
@ -420,12 +420,12 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
Width = 224
end
inherited edtCODIGO_ASIGNADO: TcxDBTextEdit
Left = 342
Left = 225
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 342
ExplicitLeft = 225
end
inherited edtPersonaContacto: TcxDBTextEdit
Style.LookAndFeel.SkinName = ''
@ -444,19 +444,43 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
Width = 121
end
inherited Button4: TButton
Left = 422
ExplicitLeft = 422
Left = 305
ExplicitLeft = 305
end
inherited Button5: TButton
Left = 422
ExplicitLeft = 422
Left = 305
ExplicitLeft = 305
end
inherited Button3: TBitBtn
Left = 247
ExplicitLeft = 247
Left = 130
ExplicitLeft = 130
end
end
end
object edtReferenciaCliente: TcxDBTextEdit
Left = 294
Top = 109
Anchors = [akLeft, akTop, akRight]
AutoSize = False
DataBinding.DataField = 'REFERENCIA_CLIENTE'
DataBinding.DataSource = DADataSource
ParentFont = False
Style.BorderColor = clWindowFrame
Style.BorderStyle = ebs3D
Style.HotTrack = False
Style.LookAndFeel.NativeStyle = True
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.NativeStyle = True
StyleDisabled.LookAndFeel.SkinName = ''
StyleDisabled.TextColor = clWindowText
StyleFocused.LookAndFeel.NativeStyle = True
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.NativeStyle = True
StyleHot.LookAndFeel.SkinName = ''
TabOrder = 5
Height = 21
Width = 258
end
object dxLayoutControl1Group_Root: TdxLayoutGroup
ShowCaption = False
Hidden = True
@ -519,6 +543,13 @@ inherited frViewPedidoProveedor: TfrViewPedidoProveedor
Control = eReferenciaPedidoCli
ControlOptions.ShowBorder = False
end
object dxLayoutControl1Item14: TdxLayoutItem
AutoAligns = [aaVertical]
AlignHorz = ahClient
Caption = 'Ref. Cliente:'
Control = edtReferenciaCliente
ControlOptions.ShowBorder = False
end
object dxLayoutControl1Item12: TdxLayoutItem
AutoAligns = [aaVertical]
AlignHorz = ahRight

View File

@ -75,6 +75,8 @@ type
dxLayoutControl1Group11: TdxLayoutGroup;
frViewDatosYSeleccionProveedorPedido1: TfrViewDatosYSeleccionProveedorPedido;
dxLayoutControl1Item1: TdxLayoutItem;
dxLayoutControl1Item14: TdxLayoutItem;
edtReferenciaCliente: TcxDBTextEdit;
procedure CustomViewCreate(Sender: TObject);
procedure CustomViewDestroy(Sender: TObject);
procedure bFormasPagoClick(Sender: TObject);
@ -255,10 +257,12 @@ begin
if Assigned(FPedidoCliAsociado) then
begin
FPedidoCliAsociado.DataTable.Active := True;
eReferenciaPedidoCli.Text := FPedidoCliAsociado.REFERENCIA
eReferenciaPedidoCli.Text := FPedidoCliAsociado.REFERENCIA;
end
else
begin
eReferenciaPedidoCli.Text := '';
end;
end
else
eReferenciaPedidoCli.Text := 'No hay pedido asociado';

View File

@ -158,6 +158,10 @@ inherited frViewPedidosProveedor: TfrViewPedidosProveedor
DataBinding.FieldName = 'REF_PED_CLIENTE'
Width = 65
end
object cxGridViewREFERENCIA_CLIENTE: TcxGridDBColumn
Caption = 'Ref. Cliente'
DataBinding.FieldName = 'REFERENCIA_CLIENTE'
end
object cxGridViewIMPORTE_TOTAL: TcxGridDBColumn
Caption = 'Importe total'
DataBinding.FieldName = 'IMPORTE_TOTAL'

View File

@ -56,6 +56,7 @@ type
cxGridViewINCIDENCIAS: TcxGridDBColumn;
cxGridViewREF_FACTURA_PROV: TcxGridDBColumn;
cxGridViewNOMBRE_OBRA: TcxGridDBColumn;
cxGridViewREFERENCIA_CLIENTE: TcxGridDBColumn;
procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel:
TcxGridLevel);
procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView;

View File

@ -13,4 +13,4 @@ BEGIN
END
/* C:\Codigo\Source\Modulos\Pedidos de cliente\Controller\PedidosCliente_controller.RES */
/* c:\temp\dtfBC.tmp */
/* c:\temp\dtf867.tmp */

View File

@ -24,6 +24,7 @@ type
function BuscarTodos(const AID_Cliente: Integer): IBizPedidoCliente; overload;
function BuscarPendientes : IBizPedidoCliente;
function BuscarPendientesPedir(const ID : Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
function BuscarPendientesPedirNoArticulos(const ID : Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
// function BuscarSinFacturar : IBizPedidoCliente;
procedure Ver(APedido : IBizPedidoCliente);
@ -118,6 +119,7 @@ type
function BuscarTodos(const AID_Cliente: Integer): IBizPedidoCliente; overload;
function BuscarPendientes : IBizPedidoCliente;
function BuscarPendientesPedir(const ID : Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
function BuscarPendientesPedirNoArticulos(const ID : Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
// function BuscarSinFacturar : IBizPedidoCliente;
function Nuevo : IBizPedidoCliente;
@ -265,6 +267,16 @@ begin
end;
end;
function TPedidosClienteController.BuscarPendientesPedirNoArticulos(const ID: Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
begin
ShowHourglassCursor;
try
Result := FDataModule.GetArticulosPendientesPedirAProvNoArticulos(ID);
finally
HideHourglassCursor;
end;
end;
{function TPedidosClienteController.BuscarSinFacturar: IBizPedidoCliente;
var
Condicion: TDAWhereExpression;
@ -827,7 +839,7 @@ begin
if not Assigned(APedido) then
raise Exception.Create ('Pedido no asignado: EsModificable');
Result := (APedido.SITUACION <> SITUACION_PEDIDO_SERVIDO);
Result := ((APedido.SITUACION <> SITUACION_PEDIDO_SERVIDO) and (APedido.SITUACION <> SITUACION_PEDIDO_ALBARANADO));
end;
procedure TPedidosClienteController.RecalcularImportes(

View File

@ -14,4 +14,4 @@ END
/* C:\Codigo\Source\Modulos\Pedidos de cliente\Data\uDataModulePedidosCliente.dfm */
/* C:\Codigo\Source\Modulos\Pedidos de cliente\Data\PedidosCliente_data.RES */
/* c:\temp\dtfBA.tmp */
/* c:\temp\dtf865.tmp */

View File

@ -1,6 +1,6 @@
inherited DataModulePedidosCliente: TDataModulePedidosCliente
OnCreate = DAClientDataModuleCreate
Height = 301
Height = 461
Width = 621
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@ -67,16 +67,33 @@ inherited DataModulePedidosCliente: TDataModulePedidosCliente
end
item
Name = 'CANT_PEDIDA_PROVEEDOR'
DataType = datCurrency
DataType = datInteger
end
item
Name = 'CANT_PENDIENTE_PEDIR'
DataType = datCurrency
end
item
Name = 'CONCEPTO'
DataType = datString
Size = 2000
end
item
Name = 'IMPORTE_UNIDAD'
DataType = datCurrency
end
item
Name = 'DESCUENTO'
DataType = datFloat
end
item
Name = 'IMPORTE_TOTAL'
DataType = datCurrency
end>
Params = <
item
Name = 'ID'
Value = '41'
Value = '1138'
ParamType = daptInput
end>
StreamingOptions = [soDisableEventsWhileStreaming]
@ -477,4 +494,68 @@ inherited DataModulePedidosCliente: TDataModulePedidosCliente
Left = 512
Top = 16
end
object tbl_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ID_PEDIDO'
DataType = datInteger
end
item
Name = 'ID_ARTICULO'
DataType = datInteger
DictionaryEntry = 'PedidosProveedor_Detalles_ID_ARTICULO'
end
item
Name = 'CANT_PEDIDA_CLIENTE'
DataType = datCurrency
end
item
Name = 'ID_PROVEEDOR'
DataType = datInteger
end
item
Name = 'CANT_PEDIDA_PROVEEDOR'
DataType = datInteger
end
item
Name = 'CANT_PENDIENTE_PEDIR'
DataType = datCurrency
end
item
Name = 'CONCEPTO'
DataType = datString
Size = 2000
end
item
Name = 'IMPORTE_UNIDAD'
DataType = datCurrency
end
item
Name = 'DESCUENTO'
DataType = datFloat
end
item
Name = 'IMPORTE_TOTAL'
DataType = datCurrency
end>
Params = <
item
Name = 'ID'
Value = '1138'
ParamType = daptInput
end>
StreamingOptions = [soDisableEventsWhileStreaming]
RemoteDataAdapter = rda_PedidosCliente
LogicalName = 'PedidoCliente_ArticulosPendientesPedirAProvNoArticulos'
IndexDefs = <>
Left = 256
Top = 320
end
object ds_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos: TDADataSource
DataSet = tbl_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos.Dataset
DataTable = tbl_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos
Left = 256
Top = 272
end
end

View File

@ -29,6 +29,8 @@ type
ds_PedidosCliente_Articulos_Pendientes: TDADataSource;
tbl_PedidosCliente_Detalles: TDAMemDataTable;
ds_PedidosCliente_Detalles: TDADataSource;
tbl_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos: TDAMemDataTable;
ds_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
private
@ -42,6 +44,7 @@ type
function GetItem(const ID : Integer) : IBizPedidoCliente;
function NewItem : IBizPedidoCliente;
function GetArticulosPendientesPedirAProv(const IDPedido: Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
function GetArticulosPendientesPedirAProvNoArticulos(const IDPedido: Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
function GetArticulosPendientes(const IDPedido: Integer): IBizPedidoClienteArticulosPend;
@ -230,4 +233,20 @@ begin
end;
end;
function TDataModulePedidosCliente.GetArticulosPendientesPedirAProvNoArticulos(
const IDPedido: Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
var
AArticulos : TDAMemDataTable;
begin
ShowHourglassCursor;
try
AArticulos := CloneDataTable(tbl_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos);
AArticulos.BusinessRulesID := BIZ_CLIENT_PEDIDO_CLIENTE_ARTICULOS_PENDIENTES_PEDIR_A_PROV;
AArticulos.ParamByName('ID').AsInteger := IDPedido;
Result := (AArticulos as IBizPedidoClienteArticulosPendientesPedirAProv);
finally
HideHourglassCursor;
end;
end;
end.

View File

@ -13,7 +13,8 @@ type
function GetItem(const ID : Integer) : IBizPedidoCliente;
function NewItem : IBizPedidoCliente;
function GetArticulosPendientes(const IDPedido: Integer): IBizPedidoClienteArticulosPend;
function GetArticulosPendientesPedirAProv(const IDPedido: Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
function GetArticulosPendientesPedirAProv(const IDPedido: Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
function GetArticulosPendientesPedirAProvNoArticulos(const IDPedido: Integer): IBizPedidoClienteArticulosPendientesPedirAProv;
end;
implementation

View File

@ -13,4 +13,4 @@ BEGIN
END
/* C:\Codigo\Source\Modulos\Pedidos de cliente\Model\PedidosCliente_model.RES */
/* c:\temp\dtfB8.tmp */
/* c:\temp\dtf863.tmp */

View File

@ -9,11 +9,12 @@ 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_ListaAnosPedidos = '{8644576E-4752-47D5-BDE9-34F3514BF462}';
RID_PedidosCliente = '{8B5249E3-D172-4515-B5B4-8FBD06AC80B0}';
RID_PedidosCliente_Detalles = '{D9E8FE15-B19F-4B65-B694-490801AD5904}';
RID_PedidosCliente_Articulos_Pendientes = '{AA7867B3-1CA3-489D-9F64-EA06960AFB0D}';
RID_PedidoCliente_ArticulosPendientesPedirAProv = '{BCB573CE-4B7A-4FEE-9415-68E28D9782E6}';
RID_ListaAnosPedidos = '{39AEA87B-B095-43F4-AE81-2407C4D498F0}';
RID_PedidosCliente = '{2C37EE57-27DA-49CE-BBFC-93C2D1771DB4}';
RID_PedidosCliente_Detalles = '{389CA843-A89F-4A47-95F3-6D2FB17E6DF9}';
RID_PedidosCliente_Articulos_Pendientes = '{29EB047A-4B49-42D4-A8E9-C42EE3E471FB}';
RID_PedidoCliente_ArticulosPendientesPedirAProv = '{1E6FC371-3B83-48DB-BB55-FEC98F3915D1}';
RID_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos = '{D624CEBB-93E5-4C10-9A10-CC433745B1F7}';
{ Data table names }
nme_ListaAnosPedidos = 'ListaAnosPedidos';
@ -21,6 +22,7 @@ const
nme_PedidosCliente_Detalles = 'PedidosCliente_Detalles';
nme_PedidosCliente_Articulos_Pendientes = 'PedidosCliente_Articulos_Pendientes';
nme_PedidoCliente_ArticulosPendientesPedirAProv = 'PedidoCliente_ArticulosPendientesPedirAProv';
nme_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos = 'PedidoCliente_ArticulosPendientesPedirAProvNoArticulos';
{ ListaAnosPedidos fields }
fld_ListaAnosPedidosANO = 'ANO';
@ -151,6 +153,10 @@ const
fld_PedidoCliente_ArticulosPendientesPedirAProvID_PROVEEDOR = 'ID_PROVEEDOR';
fld_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR = 'CANT_PEDIDA_PROVEEDOR';
fld_PedidoCliente_ArticulosPendientesPedirAProvCANT_PENDIENTE_PEDIR = 'CANT_PENDIENTE_PEDIR';
fld_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO = 'CONCEPTO';
fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD = 'IMPORTE_UNIDAD';
fld_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO = 'DESCUENTO';
fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL = 'IMPORTE_TOTAL';
{ PedidoCliente_ArticulosPendientesPedirAProv field indexes }
idx_PedidoCliente_ArticulosPendientesPedirAProvID_PEDIDO = 0;
@ -159,11 +165,39 @@ const
idx_PedidoCliente_ArticulosPendientesPedirAProvID_PROVEEDOR = 3;
idx_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR = 4;
idx_PedidoCliente_ArticulosPendientesPedirAProvCANT_PENDIENTE_PEDIR = 5;
idx_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO = 6;
idx_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD = 7;
idx_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO = 8;
idx_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL = 9;
{ PedidoCliente_ArticulosPendientesPedirAProvNoArticulos fields }
fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO = 'ID_PEDIDO';
fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO = 'ID_ARTICULO';
fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE = 'CANT_PEDIDA_CLIENTE';
fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR = 'ID_PROVEEDOR';
fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR = 'CANT_PEDIDA_PROVEEDOR';
fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR = 'CANT_PENDIENTE_PEDIR';
fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO = 'CONCEPTO';
fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD = 'IMPORTE_UNIDAD';
fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO = 'DESCUENTO';
fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL = 'IMPORTE_TOTAL';
{ PedidoCliente_ArticulosPendientesPedirAProvNoArticulos field indexes }
idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO = 0;
idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO = 1;
idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE = 2;
idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR = 3;
idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR = 4;
idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR = 5;
idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO = 6;
idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD = 7;
idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO = 8;
idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL = 9;
type
{ IListaAnosPedidos }
IListaAnosPedidos = interface(IDAStronglyTypedDataTable)
['{54A9119E-7703-4619-A695-FEF92E6C9303}']
['{013A26BB-689A-4EDF-85F8-2F1499B427B4}']
{ Property getters and setters }
function GetANOValue: String;
procedure SetANOValue(const aValue: String);
@ -198,7 +232,7 @@ type
{ IPedidosCliente }
IPedidosCliente = interface(IDAStronglyTypedDataTable)
['{5F14B45E-56DB-4F10-8EAF-FA89609A5EB8}']
['{D51AD7F0-21DB-4794-9721-69888B3E52F6}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@ -629,7 +663,7 @@ type
{ IPedidosCliente_Detalles }
IPedidosCliente_Detalles = interface(IDAStronglyTypedDataTable)
['{EC4E915D-1631-414A-AA6F-1743A167B8C3}']
['{574ABC3C-F487-4F6C-8D8B-E2C94B8EAA2C}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@ -820,7 +854,7 @@ type
{ IPedidosCliente_Articulos_Pendientes }
IPedidosCliente_Articulos_Pendientes = interface(IDAStronglyTypedDataTable)
['{A8193AC8-9646-4B77-92C5-0737D99A546B}']
['{F94E52AB-7983-45C1-9522-8F8558864380}']
{ Property getters and setters }
function GetID_ARTICULOValue: Integer;
procedure SetID_ARTICULOValue(const aValue: Integer);
@ -891,7 +925,7 @@ type
{ IPedidoCliente_ArticulosPendientesPedirAProv }
IPedidoCliente_ArticulosPendientesPedirAProv = interface(IDAStronglyTypedDataTable)
['{7C12E66E-BD01-4F60-9755-974CE324343B}']
['{8D82D999-A50C-4EB0-8E4F-1CDF6439C646}']
{ Property getters and setters }
function GetID_PEDIDOValue: Integer;
procedure SetID_PEDIDOValue(const aValue: Integer);
@ -909,14 +943,30 @@ type
procedure SetID_PROVEEDORValue(const aValue: Integer);
function GetID_PROVEEDORIsNull: Boolean;
procedure SetID_PROVEEDORIsNull(const aValue: Boolean);
function GetCANT_PEDIDA_PROVEEDORValue: Currency;
procedure SetCANT_PEDIDA_PROVEEDORValue(const aValue: Currency);
function GetCANT_PEDIDA_PROVEEDORValue: Integer;
procedure SetCANT_PEDIDA_PROVEEDORValue(const aValue: Integer);
function GetCANT_PEDIDA_PROVEEDORIsNull: Boolean;
procedure SetCANT_PEDIDA_PROVEEDORIsNull(const aValue: Boolean);
function GetCANT_PENDIENTE_PEDIRValue: Currency;
procedure SetCANT_PENDIENTE_PEDIRValue(const aValue: Currency);
function GetCANT_PENDIENTE_PEDIRIsNull: Boolean;
procedure SetCANT_PENDIENTE_PEDIRIsNull(const aValue: Boolean);
function GetCONCEPTOValue: String;
procedure SetCONCEPTOValue(const aValue: String);
function GetCONCEPTOIsNull: Boolean;
procedure SetCONCEPTOIsNull(const aValue: Boolean);
function GetIMPORTE_UNIDADValue: Currency;
procedure SetIMPORTE_UNIDADValue(const aValue: Currency);
function GetIMPORTE_UNIDADIsNull: Boolean;
procedure SetIMPORTE_UNIDADIsNull(const aValue: Boolean);
function GetDESCUENTOValue: Float;
procedure SetDESCUENTOValue(const aValue: Float);
function GetDESCUENTOIsNull: Boolean;
procedure SetDESCUENTOIsNull(const aValue: Boolean);
function GetIMPORTE_TOTALValue: Currency;
procedure SetIMPORTE_TOTALValue(const aValue: Currency);
function GetIMPORTE_TOTALIsNull: Boolean;
procedure SetIMPORTE_TOTALIsNull(const aValue: Boolean);
{ Properties }
@ -928,10 +978,18 @@ type
property CANT_PEDIDA_CLIENTEIsNull: Boolean read GetCANT_PEDIDA_CLIENTEIsNull write SetCANT_PEDIDA_CLIENTEIsNull;
property ID_PROVEEDOR: Integer read GetID_PROVEEDORValue write SetID_PROVEEDORValue;
property ID_PROVEEDORIsNull: Boolean read GetID_PROVEEDORIsNull write SetID_PROVEEDORIsNull;
property CANT_PEDIDA_PROVEEDOR: Currency read GetCANT_PEDIDA_PROVEEDORValue write SetCANT_PEDIDA_PROVEEDORValue;
property CANT_PEDIDA_PROVEEDOR: Integer read GetCANT_PEDIDA_PROVEEDORValue write SetCANT_PEDIDA_PROVEEDORValue;
property CANT_PEDIDA_PROVEEDORIsNull: Boolean read GetCANT_PEDIDA_PROVEEDORIsNull write SetCANT_PEDIDA_PROVEEDORIsNull;
property CANT_PENDIENTE_PEDIR: Currency read GetCANT_PENDIENTE_PEDIRValue write SetCANT_PENDIENTE_PEDIRValue;
property CANT_PENDIENTE_PEDIRIsNull: Boolean read GetCANT_PENDIENTE_PEDIRIsNull write SetCANT_PENDIENTE_PEDIRIsNull;
property CONCEPTO: String read GetCONCEPTOValue write SetCONCEPTOValue;
property CONCEPTOIsNull: Boolean read GetCONCEPTOIsNull write SetCONCEPTOIsNull;
property IMPORTE_UNIDAD: Currency read GetIMPORTE_UNIDADValue write SetIMPORTE_UNIDADValue;
property IMPORTE_UNIDADIsNull: Boolean read GetIMPORTE_UNIDADIsNull write SetIMPORTE_UNIDADIsNull;
property DESCUENTO: Float read GetDESCUENTOValue write SetDESCUENTOValue;
property DESCUENTOIsNull: Boolean read GetDESCUENTOIsNull write SetDESCUENTOIsNull;
property IMPORTE_TOTAL: Currency read GetIMPORTE_TOTALValue write SetIMPORTE_TOTALValue;
property IMPORTE_TOTALIsNull: Boolean read GetIMPORTE_TOTALIsNull write SetIMPORTE_TOTALIsNull;
end;
{ TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules }
@ -955,14 +1013,30 @@ type
procedure SetID_PROVEEDORValue(const aValue: Integer); virtual;
function GetID_PROVEEDORIsNull: Boolean; virtual;
procedure SetID_PROVEEDORIsNull(const aValue: Boolean); virtual;
function GetCANT_PEDIDA_PROVEEDORValue: Currency; virtual;
procedure SetCANT_PEDIDA_PROVEEDORValue(const aValue: Currency); virtual;
function GetCANT_PEDIDA_PROVEEDORValue: Integer; virtual;
procedure SetCANT_PEDIDA_PROVEEDORValue(const aValue: Integer); virtual;
function GetCANT_PEDIDA_PROVEEDORIsNull: Boolean; virtual;
procedure SetCANT_PEDIDA_PROVEEDORIsNull(const aValue: Boolean); virtual;
function GetCANT_PENDIENTE_PEDIRValue: Currency; virtual;
procedure SetCANT_PENDIENTE_PEDIRValue(const aValue: Currency); virtual;
function GetCANT_PENDIENTE_PEDIRIsNull: Boolean; virtual;
procedure SetCANT_PENDIENTE_PEDIRIsNull(const aValue: Boolean); virtual;
function GetCONCEPTOValue: String; virtual;
procedure SetCONCEPTOValue(const aValue: String); virtual;
function GetCONCEPTOIsNull: Boolean; virtual;
procedure SetCONCEPTOIsNull(const aValue: Boolean); virtual;
function GetIMPORTE_UNIDADValue: Currency; virtual;
procedure SetIMPORTE_UNIDADValue(const aValue: Currency); virtual;
function GetIMPORTE_UNIDADIsNull: Boolean; virtual;
procedure SetIMPORTE_UNIDADIsNull(const aValue: Boolean); virtual;
function GetDESCUENTOValue: Float; virtual;
procedure SetDESCUENTOValue(const aValue: Float); virtual;
function GetDESCUENTOIsNull: Boolean; virtual;
procedure SetDESCUENTOIsNull(const aValue: Boolean); virtual;
function GetIMPORTE_TOTALValue: Currency; virtual;
procedure SetIMPORTE_TOTALValue(const aValue: Currency); virtual;
function GetIMPORTE_TOTALIsNull: Boolean; virtual;
procedure SetIMPORTE_TOTALIsNull(const aValue: Boolean); virtual;
{ Properties }
property ID_PEDIDO: Integer read GetID_PEDIDOValue write SetID_PEDIDOValue;
@ -973,10 +1047,161 @@ type
property CANT_PEDIDA_CLIENTEIsNull: Boolean read GetCANT_PEDIDA_CLIENTEIsNull write SetCANT_PEDIDA_CLIENTEIsNull;
property ID_PROVEEDOR: Integer read GetID_PROVEEDORValue write SetID_PROVEEDORValue;
property ID_PROVEEDORIsNull: Boolean read GetID_PROVEEDORIsNull write SetID_PROVEEDORIsNull;
property CANT_PEDIDA_PROVEEDOR: Currency read GetCANT_PEDIDA_PROVEEDORValue write SetCANT_PEDIDA_PROVEEDORValue;
property CANT_PEDIDA_PROVEEDOR: Integer read GetCANT_PEDIDA_PROVEEDORValue write SetCANT_PEDIDA_PROVEEDORValue;
property CANT_PEDIDA_PROVEEDORIsNull: Boolean read GetCANT_PEDIDA_PROVEEDORIsNull write SetCANT_PEDIDA_PROVEEDORIsNull;
property CANT_PENDIENTE_PEDIR: Currency read GetCANT_PENDIENTE_PEDIRValue write SetCANT_PENDIENTE_PEDIRValue;
property CANT_PENDIENTE_PEDIRIsNull: Boolean read GetCANT_PENDIENTE_PEDIRIsNull write SetCANT_PENDIENTE_PEDIRIsNull;
property CONCEPTO: String read GetCONCEPTOValue write SetCONCEPTOValue;
property CONCEPTOIsNull: Boolean read GetCONCEPTOIsNull write SetCONCEPTOIsNull;
property IMPORTE_UNIDAD: Currency read GetIMPORTE_UNIDADValue write SetIMPORTE_UNIDADValue;
property IMPORTE_UNIDADIsNull: Boolean read GetIMPORTE_UNIDADIsNull write SetIMPORTE_UNIDADIsNull;
property DESCUENTO: Float read GetDESCUENTOValue write SetDESCUENTOValue;
property DESCUENTOIsNull: Boolean read GetDESCUENTOIsNull write SetDESCUENTOIsNull;
property IMPORTE_TOTAL: Currency read GetIMPORTE_TOTALValue write SetIMPORTE_TOTALValue;
property IMPORTE_TOTALIsNull: Boolean read GetIMPORTE_TOTALIsNull write SetIMPORTE_TOTALIsNull;
public
constructor Create(aDataTable: TDADataTable); override;
destructor Destroy; override;
end;
{ IPedidoCliente_ArticulosPendientesPedirAProvNoArticulos }
IPedidoCliente_ArticulosPendientesPedirAProvNoArticulos = interface(IDAStronglyTypedDataTable)
['{B3551FC7-D507-4452-8454-B2815339D817}']
{ Property getters and setters }
function GetID_PEDIDOValue: Integer;
procedure SetID_PEDIDOValue(const aValue: Integer);
function GetID_PEDIDOIsNull: Boolean;
procedure SetID_PEDIDOIsNull(const aValue: Boolean);
function GetID_ARTICULOValue: Integer;
procedure SetID_ARTICULOValue(const aValue: Integer);
function GetID_ARTICULOIsNull: Boolean;
procedure SetID_ARTICULOIsNull(const aValue: Boolean);
function GetCANT_PEDIDA_CLIENTEValue: Currency;
procedure SetCANT_PEDIDA_CLIENTEValue(const aValue: Currency);
function GetCANT_PEDIDA_CLIENTEIsNull: Boolean;
procedure SetCANT_PEDIDA_CLIENTEIsNull(const aValue: Boolean);
function GetID_PROVEEDORValue: Integer;
procedure SetID_PROVEEDORValue(const aValue: Integer);
function GetID_PROVEEDORIsNull: Boolean;
procedure SetID_PROVEEDORIsNull(const aValue: Boolean);
function GetCANT_PEDIDA_PROVEEDORValue: Integer;
procedure SetCANT_PEDIDA_PROVEEDORValue(const aValue: Integer);
function GetCANT_PEDIDA_PROVEEDORIsNull: Boolean;
procedure SetCANT_PEDIDA_PROVEEDORIsNull(const aValue: Boolean);
function GetCANT_PENDIENTE_PEDIRValue: Currency;
procedure SetCANT_PENDIENTE_PEDIRValue(const aValue: Currency);
function GetCANT_PENDIENTE_PEDIRIsNull: Boolean;
procedure SetCANT_PENDIENTE_PEDIRIsNull(const aValue: Boolean);
function GetCONCEPTOValue: String;
procedure SetCONCEPTOValue(const aValue: String);
function GetCONCEPTOIsNull: Boolean;
procedure SetCONCEPTOIsNull(const aValue: Boolean);
function GetIMPORTE_UNIDADValue: Currency;
procedure SetIMPORTE_UNIDADValue(const aValue: Currency);
function GetIMPORTE_UNIDADIsNull: Boolean;
procedure SetIMPORTE_UNIDADIsNull(const aValue: Boolean);
function GetDESCUENTOValue: Float;
procedure SetDESCUENTOValue(const aValue: Float);
function GetDESCUENTOIsNull: Boolean;
procedure SetDESCUENTOIsNull(const aValue: Boolean);
function GetIMPORTE_TOTALValue: Currency;
procedure SetIMPORTE_TOTALValue(const aValue: Currency);
function GetIMPORTE_TOTALIsNull: Boolean;
procedure SetIMPORTE_TOTALIsNull(const aValue: Boolean);
{ Properties }
property ID_PEDIDO: Integer read GetID_PEDIDOValue write SetID_PEDIDOValue;
property ID_PEDIDOIsNull: Boolean read GetID_PEDIDOIsNull write SetID_PEDIDOIsNull;
property ID_ARTICULO: Integer read GetID_ARTICULOValue write SetID_ARTICULOValue;
property ID_ARTICULOIsNull: Boolean read GetID_ARTICULOIsNull write SetID_ARTICULOIsNull;
property CANT_PEDIDA_CLIENTE: Currency read GetCANT_PEDIDA_CLIENTEValue write SetCANT_PEDIDA_CLIENTEValue;
property CANT_PEDIDA_CLIENTEIsNull: Boolean read GetCANT_PEDIDA_CLIENTEIsNull write SetCANT_PEDIDA_CLIENTEIsNull;
property ID_PROVEEDOR: Integer read GetID_PROVEEDORValue write SetID_PROVEEDORValue;
property ID_PROVEEDORIsNull: Boolean read GetID_PROVEEDORIsNull write SetID_PROVEEDORIsNull;
property CANT_PEDIDA_PROVEEDOR: Integer read GetCANT_PEDIDA_PROVEEDORValue write SetCANT_PEDIDA_PROVEEDORValue;
property CANT_PEDIDA_PROVEEDORIsNull: Boolean read GetCANT_PEDIDA_PROVEEDORIsNull write SetCANT_PEDIDA_PROVEEDORIsNull;
property CANT_PENDIENTE_PEDIR: Currency read GetCANT_PENDIENTE_PEDIRValue write SetCANT_PENDIENTE_PEDIRValue;
property CANT_PENDIENTE_PEDIRIsNull: Boolean read GetCANT_PENDIENTE_PEDIRIsNull write SetCANT_PENDIENTE_PEDIRIsNull;
property CONCEPTO: String read GetCONCEPTOValue write SetCONCEPTOValue;
property CONCEPTOIsNull: Boolean read GetCONCEPTOIsNull write SetCONCEPTOIsNull;
property IMPORTE_UNIDAD: Currency read GetIMPORTE_UNIDADValue write SetIMPORTE_UNIDADValue;
property IMPORTE_UNIDADIsNull: Boolean read GetIMPORTE_UNIDADIsNull write SetIMPORTE_UNIDADIsNull;
property DESCUENTO: Float read GetDESCUENTOValue write SetDESCUENTOValue;
property DESCUENTOIsNull: Boolean read GetDESCUENTOIsNull write SetDESCUENTOIsNull;
property IMPORTE_TOTAL: Currency read GetIMPORTE_TOTALValue write SetIMPORTE_TOTALValue;
property IMPORTE_TOTALIsNull: Boolean read GetIMPORTE_TOTALIsNull write SetIMPORTE_TOTALIsNull;
end;
{ TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules }
TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules = class(TIntfObjectDADataTableRules, IPedidoCliente_ArticulosPendientesPedirAProvNoArticulos)
private
protected
{ Property getters and setters }
function GetID_PEDIDOValue: Integer; virtual;
procedure SetID_PEDIDOValue(const aValue: Integer); virtual;
function GetID_PEDIDOIsNull: Boolean; virtual;
procedure SetID_PEDIDOIsNull(const aValue: Boolean); virtual;
function GetID_ARTICULOValue: Integer; virtual;
procedure SetID_ARTICULOValue(const aValue: Integer); virtual;
function GetID_ARTICULOIsNull: Boolean; virtual;
procedure SetID_ARTICULOIsNull(const aValue: Boolean); virtual;
function GetCANT_PEDIDA_CLIENTEValue: Currency; virtual;
procedure SetCANT_PEDIDA_CLIENTEValue(const aValue: Currency); virtual;
function GetCANT_PEDIDA_CLIENTEIsNull: Boolean; virtual;
procedure SetCANT_PEDIDA_CLIENTEIsNull(const aValue: Boolean); virtual;
function GetID_PROVEEDORValue: Integer; virtual;
procedure SetID_PROVEEDORValue(const aValue: Integer); virtual;
function GetID_PROVEEDORIsNull: Boolean; virtual;
procedure SetID_PROVEEDORIsNull(const aValue: Boolean); virtual;
function GetCANT_PEDIDA_PROVEEDORValue: Integer; virtual;
procedure SetCANT_PEDIDA_PROVEEDORValue(const aValue: Integer); virtual;
function GetCANT_PEDIDA_PROVEEDORIsNull: Boolean; virtual;
procedure SetCANT_PEDIDA_PROVEEDORIsNull(const aValue: Boolean); virtual;
function GetCANT_PENDIENTE_PEDIRValue: Currency; virtual;
procedure SetCANT_PENDIENTE_PEDIRValue(const aValue: Currency); virtual;
function GetCANT_PENDIENTE_PEDIRIsNull: Boolean; virtual;
procedure SetCANT_PENDIENTE_PEDIRIsNull(const aValue: Boolean); virtual;
function GetCONCEPTOValue: String; virtual;
procedure SetCONCEPTOValue(const aValue: String); virtual;
function GetCONCEPTOIsNull: Boolean; virtual;
procedure SetCONCEPTOIsNull(const aValue: Boolean); virtual;
function GetIMPORTE_UNIDADValue: Currency; virtual;
procedure SetIMPORTE_UNIDADValue(const aValue: Currency); virtual;
function GetIMPORTE_UNIDADIsNull: Boolean; virtual;
procedure SetIMPORTE_UNIDADIsNull(const aValue: Boolean); virtual;
function GetDESCUENTOValue: Float; virtual;
procedure SetDESCUENTOValue(const aValue: Float); virtual;
function GetDESCUENTOIsNull: Boolean; virtual;
procedure SetDESCUENTOIsNull(const aValue: Boolean); virtual;
function GetIMPORTE_TOTALValue: Currency; virtual;
procedure SetIMPORTE_TOTALValue(const aValue: Currency); virtual;
function GetIMPORTE_TOTALIsNull: Boolean; virtual;
procedure SetIMPORTE_TOTALIsNull(const aValue: Boolean); virtual;
{ Properties }
property ID_PEDIDO: Integer read GetID_PEDIDOValue write SetID_PEDIDOValue;
property ID_PEDIDOIsNull: Boolean read GetID_PEDIDOIsNull write SetID_PEDIDOIsNull;
property ID_ARTICULO: Integer read GetID_ARTICULOValue write SetID_ARTICULOValue;
property ID_ARTICULOIsNull: Boolean read GetID_ARTICULOIsNull write SetID_ARTICULOIsNull;
property CANT_PEDIDA_CLIENTE: Currency read GetCANT_PEDIDA_CLIENTEValue write SetCANT_PEDIDA_CLIENTEValue;
property CANT_PEDIDA_CLIENTEIsNull: Boolean read GetCANT_PEDIDA_CLIENTEIsNull write SetCANT_PEDIDA_CLIENTEIsNull;
property ID_PROVEEDOR: Integer read GetID_PROVEEDORValue write SetID_PROVEEDORValue;
property ID_PROVEEDORIsNull: Boolean read GetID_PROVEEDORIsNull write SetID_PROVEEDORIsNull;
property CANT_PEDIDA_PROVEEDOR: Integer read GetCANT_PEDIDA_PROVEEDORValue write SetCANT_PEDIDA_PROVEEDORValue;
property CANT_PEDIDA_PROVEEDORIsNull: Boolean read GetCANT_PEDIDA_PROVEEDORIsNull write SetCANT_PEDIDA_PROVEEDORIsNull;
property CANT_PENDIENTE_PEDIR: Currency read GetCANT_PENDIENTE_PEDIRValue write SetCANT_PENDIENTE_PEDIRValue;
property CANT_PENDIENTE_PEDIRIsNull: Boolean read GetCANT_PENDIENTE_PEDIRIsNull write SetCANT_PENDIENTE_PEDIRIsNull;
property CONCEPTO: String read GetCONCEPTOValue write SetCONCEPTOValue;
property CONCEPTOIsNull: Boolean read GetCONCEPTOIsNull write SetCONCEPTOIsNull;
property IMPORTE_UNIDAD: Currency read GetIMPORTE_UNIDADValue write SetIMPORTE_UNIDADValue;
property IMPORTE_UNIDADIsNull: Boolean read GetIMPORTE_UNIDADIsNull write SetIMPORTE_UNIDADIsNull;
property DESCUENTO: Float read GetDESCUENTOValue write SetDESCUENTOValue;
property DESCUENTOIsNull: Boolean read GetDESCUENTOIsNull write SetDESCUENTOIsNull;
property IMPORTE_TOTAL: Currency read GetIMPORTE_TOTALValue write SetIMPORTE_TOTALValue;
property IMPORTE_TOTALIsNull: Boolean read GetIMPORTE_TOTALIsNull write SetIMPORTE_TOTALIsNull;
public
constructor Create(aDataTable: TDADataTable); override;
@ -2256,14 +2481,14 @@ begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvID_PROVEEDOR].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetCANT_PEDIDA_PROVEEDORValue: Currency;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetCANT_PEDIDA_PROVEEDORValue: Integer;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR].AsCurrency;
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR].AsInteger;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.SetCANT_PEDIDA_PROVEEDORValue(const aValue: Currency);
procedure TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.SetCANT_PEDIDA_PROVEEDORValue(const aValue: Integer);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR].AsCurrency := aValue;
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR].AsInteger := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetCANT_PEDIDA_PROVEEDORIsNull: boolean;
@ -2298,6 +2523,312 @@ begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvCANT_PENDIENTE_PEDIR].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetCONCEPTOValue: String;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO].AsString;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.SetCONCEPTOValue(const aValue: String);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO].AsString := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetCONCEPTOIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.SetCONCEPTOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetIMPORTE_UNIDADValue: Currency;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD].AsCurrency;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.SetIMPORTE_UNIDADValue(const aValue: Currency);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD].AsCurrency := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetIMPORTE_UNIDADIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.SetIMPORTE_UNIDADIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetDESCUENTOValue: Float;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO].AsFloat;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.SetDESCUENTOValue(const aValue: Float);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO].AsFloat := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetDESCUENTOIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.SetDESCUENTOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetIMPORTE_TOTALValue: Currency;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL].AsCurrency;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.SetIMPORTE_TOTALValue(const aValue: Currency);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL].AsCurrency := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.GetIMPORTE_TOTALIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules.SetIMPORTE_TOTALIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL].AsVariant := Null;
end;
{ TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules }
constructor TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.Create(aDataTable: TDADataTable);
begin
inherited;
end;
destructor TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.Destroy;
begin
inherited;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetID_PEDIDOValue: Integer;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO].AsInteger;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetID_PEDIDOValue(const aValue: Integer);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO].AsInteger := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetID_PEDIDOIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetID_PEDIDOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetID_ARTICULOValue: Integer;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO].AsInteger;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetID_ARTICULOValue(const aValue: Integer);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO].AsInteger := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetID_ARTICULOIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetID_ARTICULOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetCANT_PEDIDA_CLIENTEValue: Currency;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE].AsCurrency;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetCANT_PEDIDA_CLIENTEValue(const aValue: Currency);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE].AsCurrency := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetCANT_PEDIDA_CLIENTEIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetCANT_PEDIDA_CLIENTEIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetID_PROVEEDORValue: Integer;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR].AsInteger;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetID_PROVEEDORValue(const aValue: Integer);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR].AsInteger := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetID_PROVEEDORIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetID_PROVEEDORIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetCANT_PEDIDA_PROVEEDORValue: Integer;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR].AsInteger;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetCANT_PEDIDA_PROVEEDORValue(const aValue: Integer);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR].AsInteger := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetCANT_PEDIDA_PROVEEDORIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetCANT_PEDIDA_PROVEEDORIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetCANT_PENDIENTE_PEDIRValue: Currency;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR].AsCurrency;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetCANT_PENDIENTE_PEDIRValue(const aValue: Currency);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR].AsCurrency := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetCANT_PENDIENTE_PEDIRIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetCANT_PENDIENTE_PEDIRIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetCONCEPTOValue: String;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO].AsString;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetCONCEPTOValue(const aValue: String);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO].AsString := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetCONCEPTOIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetCONCEPTOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetIMPORTE_UNIDADValue: Currency;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD].AsCurrency;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetIMPORTE_UNIDADValue(const aValue: Currency);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD].AsCurrency := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetIMPORTE_UNIDADIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetIMPORTE_UNIDADIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetDESCUENTOValue: Float;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO].AsFloat;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetDESCUENTOValue(const aValue: Float);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO].AsFloat := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetDESCUENTOIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetDESCUENTOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO].AsVariant := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetIMPORTE_TOTALValue: Currency;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL].AsCurrency;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetIMPORTE_TOTALValue(const aValue: Currency);
begin
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL].AsCurrency := aValue;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.GetIMPORTE_TOTALIsNull: boolean;
begin
result := DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL].IsNull;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules.SetIMPORTE_TOTALIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL].AsVariant := Null;
end;
initialization
RegisterDataTableRules(RID_ListaAnosPedidos, TListaAnosPedidosDataTableRules);
@ -2305,5 +2836,6 @@ initialization
RegisterDataTableRules(RID_PedidosCliente_Detalles, TPedidosCliente_DetallesDataTableRules);
RegisterDataTableRules(RID_PedidosCliente_Articulos_Pendientes, TPedidosCliente_Articulos_PendientesDataTableRules);
RegisterDataTableRules(RID_PedidoCliente_ArticulosPendientesPedirAProv, TPedidoCliente_ArticulosPendientesPedirAProvDataTableRules);
RegisterDataTableRules(RID_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos, TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDataTableRules);
end.

View File

@ -9,16 +9,17 @@ 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_ListaAnosPedidosDelta = '{76D21809-9389-466A-8EA6-770F2C9CC4CE}';
RID_PedidosClienteDelta = '{04D07B96-AF61-4C4B-B0BB-B3990FD371B0}';
RID_PedidosCliente_DetallesDelta = '{F54283EE-DC22-47FE-B6E9-C16541FFF323}';
RID_PedidosCliente_Articulos_PendientesDelta = '{25A809D3-7A74-4693-9174-971D6E346DB8}';
RID_PedidoCliente_ArticulosPendientesPedirAProvDelta = '{B2CCEE7F-A2FE-4853-868F-7C6C8E5BC340}';
RID_ListaAnosPedidosDelta = '{AFC97261-540F-44C4-9AD7-057298F1B086}';
RID_PedidosClienteDelta = '{E50F050B-03E8-4C84-91AA-9B8205480C0D}';
RID_PedidosCliente_DetallesDelta = '{506DEE40-B318-405D-BF82-CCE6502097E8}';
RID_PedidosCliente_Articulos_PendientesDelta = '{FB70B126-428D-454B-AA03-814B3F03B317}';
RID_PedidoCliente_ArticulosPendientesPedirAProvDelta = '{14A7355B-4DDA-4A3F-AFF0-A0C79E98EE09}';
RID_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDelta = '{1D7515BA-4719-4377-BF5D-F3027714E5E8}';
type
{ IListaAnosPedidosDelta }
IListaAnosPedidosDelta = interface(IListaAnosPedidos)
['{76D21809-9389-466A-8EA6-770F2C9CC4CE}']
['{AFC97261-540F-44C4-9AD7-057298F1B086}']
{ Property getters and setters }
function GetOldANOValue : String;
@ -52,7 +53,7 @@ type
{ IPedidosClienteDelta }
IPedidosClienteDelta = interface(IPedidosCliente)
['{04D07B96-AF61-4C4B-B0BB-B3990FD371B0}']
['{E50F050B-03E8-4C84-91AA-9B8205480C0D}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer;
@ -484,7 +485,7 @@ type
{ IPedidosCliente_DetallesDelta }
IPedidosCliente_DetallesDelta = interface(IPedidosCliente_Detalles)
['{F54283EE-DC22-47FE-B6E9-C16541FFF323}']
['{506DEE40-B318-405D-BF82-CCE6502097E8}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_PEDIDOValue : Integer;
@ -674,7 +675,7 @@ type
{ IPedidosCliente_Articulos_PendientesDelta }
IPedidosCliente_Articulos_PendientesDelta = interface(IPedidosCliente_Articulos_Pendientes)
['{25A809D3-7A74-4693-9174-971D6E346DB8}']
['{FB70B126-428D-454B-AA03-814B3F03B317}']
{ Property getters and setters }
function GetOldID_ARTICULOValue : Integer;
function GetOldCANTIDAD_PEDValue : Currency;
@ -744,22 +745,30 @@ type
{ IPedidoCliente_ArticulosPendientesPedirAProvDelta }
IPedidoCliente_ArticulosPendientesPedirAProvDelta = interface(IPedidoCliente_ArticulosPendientesPedirAProv)
['{B2CCEE7F-A2FE-4853-868F-7C6C8E5BC340}']
['{14A7355B-4DDA-4A3F-AFF0-A0C79E98EE09}']
{ Property getters and setters }
function GetOldID_PEDIDOValue : Integer;
function GetOldID_ARTICULOValue : Integer;
function GetOldCANT_PEDIDA_CLIENTEValue : Currency;
function GetOldID_PROVEEDORValue : Integer;
function GetOldCANT_PEDIDA_PROVEEDORValue : Currency;
function GetOldCANT_PEDIDA_PROVEEDORValue : Integer;
function GetOldCANT_PENDIENTE_PEDIRValue : Currency;
function GetOldCONCEPTOValue : String;
function GetOldIMPORTE_UNIDADValue : Currency;
function GetOldDESCUENTOValue : Float;
function GetOldIMPORTE_TOTALValue : Currency;
{ Properties }
property OldID_PEDIDO : Integer read GetOldID_PEDIDOValue;
property OldID_ARTICULO : Integer read GetOldID_ARTICULOValue;
property OldCANT_PEDIDA_CLIENTE : Currency read GetOldCANT_PEDIDA_CLIENTEValue;
property OldID_PROVEEDOR : Integer read GetOldID_PROVEEDORValue;
property OldCANT_PEDIDA_PROVEEDOR : Currency read GetOldCANT_PEDIDA_PROVEEDORValue;
property OldCANT_PEDIDA_PROVEEDOR : Integer read GetOldCANT_PEDIDA_PROVEEDORValue;
property OldCANT_PENDIENTE_PEDIR : Currency read GetOldCANT_PENDIENTE_PEDIRValue;
property OldCONCEPTO : String read GetOldCONCEPTOValue;
property OldIMPORTE_UNIDAD : Currency read GetOldIMPORTE_UNIDADValue;
property OldDESCUENTO : Float read GetOldDESCUENTOValue;
property OldIMPORTE_TOTAL : Currency read GetOldIMPORTE_TOTALValue;
end;
{ TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules }
@ -791,11 +800,11 @@ type
function GetOldID_PROVEEDORIsNull: Boolean; virtual;
procedure SetID_PROVEEDORValue(const aValue: Integer); virtual;
procedure SetID_PROVEEDORIsNull(const aValue: Boolean); virtual;
function GetCANT_PEDIDA_PROVEEDORValue: Currency; virtual;
function GetCANT_PEDIDA_PROVEEDORValue: Integer; virtual;
function GetCANT_PEDIDA_PROVEEDORIsNull: Boolean; virtual;
function GetOldCANT_PEDIDA_PROVEEDORValue: Currency; virtual;
function GetOldCANT_PEDIDA_PROVEEDORValue: Integer; virtual;
function GetOldCANT_PEDIDA_PROVEEDORIsNull: Boolean; virtual;
procedure SetCANT_PEDIDA_PROVEEDORValue(const aValue: Currency); virtual;
procedure SetCANT_PEDIDA_PROVEEDORValue(const aValue: Integer); virtual;
procedure SetCANT_PEDIDA_PROVEEDORIsNull(const aValue: Boolean); virtual;
function GetCANT_PENDIENTE_PEDIRValue: Currency; virtual;
function GetCANT_PENDIENTE_PEDIRIsNull: Boolean; virtual;
@ -803,6 +812,30 @@ type
function GetOldCANT_PENDIENTE_PEDIRIsNull: Boolean; virtual;
procedure SetCANT_PENDIENTE_PEDIRValue(const aValue: Currency); virtual;
procedure SetCANT_PENDIENTE_PEDIRIsNull(const aValue: Boolean); virtual;
function GetCONCEPTOValue: String; virtual;
function GetCONCEPTOIsNull: Boolean; virtual;
function GetOldCONCEPTOValue: String; virtual;
function GetOldCONCEPTOIsNull: Boolean; virtual;
procedure SetCONCEPTOValue(const aValue: String); virtual;
procedure SetCONCEPTOIsNull(const aValue: Boolean); virtual;
function GetIMPORTE_UNIDADValue: Currency; virtual;
function GetIMPORTE_UNIDADIsNull: Boolean; virtual;
function GetOldIMPORTE_UNIDADValue: Currency; virtual;
function GetOldIMPORTE_UNIDADIsNull: Boolean; virtual;
procedure SetIMPORTE_UNIDADValue(const aValue: Currency); virtual;
procedure SetIMPORTE_UNIDADIsNull(const aValue: Boolean); virtual;
function GetDESCUENTOValue: Float; virtual;
function GetDESCUENTOIsNull: Boolean; virtual;
function GetOldDESCUENTOValue: Float; virtual;
function GetOldDESCUENTOIsNull: Boolean; virtual;
procedure SetDESCUENTOValue(const aValue: Float); virtual;
procedure SetDESCUENTOIsNull(const aValue: Boolean); virtual;
function GetIMPORTE_TOTALValue: Currency; virtual;
function GetIMPORTE_TOTALIsNull: Boolean; virtual;
function GetOldIMPORTE_TOTALValue: Currency; virtual;
function GetOldIMPORTE_TOTALIsNull: Boolean; virtual;
procedure SetIMPORTE_TOTALValue(const aValue: Currency); virtual;
procedure SetIMPORTE_TOTALIsNull(const aValue: Boolean); virtual;
{ Properties }
property ID_PEDIDO : Integer read GetID_PEDIDOValue write SetID_PEDIDOValue;
@ -821,14 +854,172 @@ type
property ID_PROVEEDORIsNull : Boolean read GetID_PROVEEDORIsNull write SetID_PROVEEDORIsNull;
property OldID_PROVEEDOR : Integer read GetOldID_PROVEEDORValue;
property OldID_PROVEEDORIsNull : Boolean read GetOldID_PROVEEDORIsNull;
property CANT_PEDIDA_PROVEEDOR : Currency read GetCANT_PEDIDA_PROVEEDORValue write SetCANT_PEDIDA_PROVEEDORValue;
property CANT_PEDIDA_PROVEEDOR : Integer read GetCANT_PEDIDA_PROVEEDORValue write SetCANT_PEDIDA_PROVEEDORValue;
property CANT_PEDIDA_PROVEEDORIsNull : Boolean read GetCANT_PEDIDA_PROVEEDORIsNull write SetCANT_PEDIDA_PROVEEDORIsNull;
property OldCANT_PEDIDA_PROVEEDOR : Currency read GetOldCANT_PEDIDA_PROVEEDORValue;
property OldCANT_PEDIDA_PROVEEDOR : Integer read GetOldCANT_PEDIDA_PROVEEDORValue;
property OldCANT_PEDIDA_PROVEEDORIsNull : Boolean read GetOldCANT_PEDIDA_PROVEEDORIsNull;
property CANT_PENDIENTE_PEDIR : Currency read GetCANT_PENDIENTE_PEDIRValue write SetCANT_PENDIENTE_PEDIRValue;
property CANT_PENDIENTE_PEDIRIsNull : Boolean read GetCANT_PENDIENTE_PEDIRIsNull write SetCANT_PENDIENTE_PEDIRIsNull;
property OldCANT_PENDIENTE_PEDIR : Currency read GetOldCANT_PENDIENTE_PEDIRValue;
property OldCANT_PENDIENTE_PEDIRIsNull : Boolean read GetOldCANT_PENDIENTE_PEDIRIsNull;
property CONCEPTO : String read GetCONCEPTOValue write SetCONCEPTOValue;
property CONCEPTOIsNull : Boolean read GetCONCEPTOIsNull write SetCONCEPTOIsNull;
property OldCONCEPTO : String read GetOldCONCEPTOValue;
property OldCONCEPTOIsNull : Boolean read GetOldCONCEPTOIsNull;
property IMPORTE_UNIDAD : Currency read GetIMPORTE_UNIDADValue write SetIMPORTE_UNIDADValue;
property IMPORTE_UNIDADIsNull : Boolean read GetIMPORTE_UNIDADIsNull write SetIMPORTE_UNIDADIsNull;
property OldIMPORTE_UNIDAD : Currency read GetOldIMPORTE_UNIDADValue;
property OldIMPORTE_UNIDADIsNull : Boolean read GetOldIMPORTE_UNIDADIsNull;
property DESCUENTO : Float read GetDESCUENTOValue write SetDESCUENTOValue;
property DESCUENTOIsNull : Boolean read GetDESCUENTOIsNull write SetDESCUENTOIsNull;
property OldDESCUENTO : Float read GetOldDESCUENTOValue;
property OldDESCUENTOIsNull : Boolean read GetOldDESCUENTOIsNull;
property IMPORTE_TOTAL : Currency read GetIMPORTE_TOTALValue write SetIMPORTE_TOTALValue;
property IMPORTE_TOTALIsNull : Boolean read GetIMPORTE_TOTALIsNull write SetIMPORTE_TOTALIsNull;
property OldIMPORTE_TOTAL : Currency read GetOldIMPORTE_TOTALValue;
property OldIMPORTE_TOTALIsNull : Boolean read GetOldIMPORTE_TOTALIsNull;
public
constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
destructor Destroy; override;
end;
{ IPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDelta }
IPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDelta = interface(IPedidoCliente_ArticulosPendientesPedirAProvNoArticulos)
['{1D7515BA-4719-4377-BF5D-F3027714E5E8}']
{ Property getters and setters }
function GetOldID_PEDIDOValue : Integer;
function GetOldID_ARTICULOValue : Integer;
function GetOldCANT_PEDIDA_CLIENTEValue : Currency;
function GetOldID_PROVEEDORValue : Integer;
function GetOldCANT_PEDIDA_PROVEEDORValue : Integer;
function GetOldCANT_PENDIENTE_PEDIRValue : Currency;
function GetOldCONCEPTOValue : String;
function GetOldIMPORTE_UNIDADValue : Currency;
function GetOldDESCUENTOValue : Float;
function GetOldIMPORTE_TOTALValue : Currency;
{ Properties }
property OldID_PEDIDO : Integer read GetOldID_PEDIDOValue;
property OldID_ARTICULO : Integer read GetOldID_ARTICULOValue;
property OldCANT_PEDIDA_CLIENTE : Currency read GetOldCANT_PEDIDA_CLIENTEValue;
property OldID_PROVEEDOR : Integer read GetOldID_PROVEEDORValue;
property OldCANT_PEDIDA_PROVEEDOR : Integer read GetOldCANT_PEDIDA_PROVEEDORValue;
property OldCANT_PENDIENTE_PEDIR : Currency read GetOldCANT_PENDIENTE_PEDIRValue;
property OldCONCEPTO : String read GetOldCONCEPTOValue;
property OldIMPORTE_UNIDAD : Currency read GetOldIMPORTE_UNIDADValue;
property OldDESCUENTO : Float read GetOldDESCUENTOValue;
property OldIMPORTE_TOTAL : Currency read GetOldIMPORTE_TOTALValue;
end;
{ TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules }
TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules = class(TDABusinessProcessorRules, IPedidoCliente_ArticulosPendientesPedirAProvNoArticulos, IPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDelta)
private
protected
{ Property getters and setters }
function GetID_PEDIDOValue: Integer; virtual;
function GetID_PEDIDOIsNull: Boolean; virtual;
function GetOldID_PEDIDOValue: Integer; virtual;
function GetOldID_PEDIDOIsNull: Boolean; virtual;
procedure SetID_PEDIDOValue(const aValue: Integer); virtual;
procedure SetID_PEDIDOIsNull(const aValue: Boolean); virtual;
function GetID_ARTICULOValue: Integer; virtual;
function GetID_ARTICULOIsNull: Boolean; virtual;
function GetOldID_ARTICULOValue: Integer; virtual;
function GetOldID_ARTICULOIsNull: Boolean; virtual;
procedure SetID_ARTICULOValue(const aValue: Integer); virtual;
procedure SetID_ARTICULOIsNull(const aValue: Boolean); virtual;
function GetCANT_PEDIDA_CLIENTEValue: Currency; virtual;
function GetCANT_PEDIDA_CLIENTEIsNull: Boolean; virtual;
function GetOldCANT_PEDIDA_CLIENTEValue: Currency; virtual;
function GetOldCANT_PEDIDA_CLIENTEIsNull: Boolean; virtual;
procedure SetCANT_PEDIDA_CLIENTEValue(const aValue: Currency); virtual;
procedure SetCANT_PEDIDA_CLIENTEIsNull(const aValue: Boolean); virtual;
function GetID_PROVEEDORValue: Integer; virtual;
function GetID_PROVEEDORIsNull: Boolean; virtual;
function GetOldID_PROVEEDORValue: Integer; virtual;
function GetOldID_PROVEEDORIsNull: Boolean; virtual;
procedure SetID_PROVEEDORValue(const aValue: Integer); virtual;
procedure SetID_PROVEEDORIsNull(const aValue: Boolean); virtual;
function GetCANT_PEDIDA_PROVEEDORValue: Integer; virtual;
function GetCANT_PEDIDA_PROVEEDORIsNull: Boolean; virtual;
function GetOldCANT_PEDIDA_PROVEEDORValue: Integer; virtual;
function GetOldCANT_PEDIDA_PROVEEDORIsNull: Boolean; virtual;
procedure SetCANT_PEDIDA_PROVEEDORValue(const aValue: Integer); virtual;
procedure SetCANT_PEDIDA_PROVEEDORIsNull(const aValue: Boolean); virtual;
function GetCANT_PENDIENTE_PEDIRValue: Currency; virtual;
function GetCANT_PENDIENTE_PEDIRIsNull: Boolean; virtual;
function GetOldCANT_PENDIENTE_PEDIRValue: Currency; virtual;
function GetOldCANT_PENDIENTE_PEDIRIsNull: Boolean; virtual;
procedure SetCANT_PENDIENTE_PEDIRValue(const aValue: Currency); virtual;
procedure SetCANT_PENDIENTE_PEDIRIsNull(const aValue: Boolean); virtual;
function GetCONCEPTOValue: String; virtual;
function GetCONCEPTOIsNull: Boolean; virtual;
function GetOldCONCEPTOValue: String; virtual;
function GetOldCONCEPTOIsNull: Boolean; virtual;
procedure SetCONCEPTOValue(const aValue: String); virtual;
procedure SetCONCEPTOIsNull(const aValue: Boolean); virtual;
function GetIMPORTE_UNIDADValue: Currency; virtual;
function GetIMPORTE_UNIDADIsNull: Boolean; virtual;
function GetOldIMPORTE_UNIDADValue: Currency; virtual;
function GetOldIMPORTE_UNIDADIsNull: Boolean; virtual;
procedure SetIMPORTE_UNIDADValue(const aValue: Currency); virtual;
procedure SetIMPORTE_UNIDADIsNull(const aValue: Boolean); virtual;
function GetDESCUENTOValue: Float; virtual;
function GetDESCUENTOIsNull: Boolean; virtual;
function GetOldDESCUENTOValue: Float; virtual;
function GetOldDESCUENTOIsNull: Boolean; virtual;
procedure SetDESCUENTOValue(const aValue: Float); virtual;
procedure SetDESCUENTOIsNull(const aValue: Boolean); virtual;
function GetIMPORTE_TOTALValue: Currency; virtual;
function GetIMPORTE_TOTALIsNull: Boolean; virtual;
function GetOldIMPORTE_TOTALValue: Currency; virtual;
function GetOldIMPORTE_TOTALIsNull: Boolean; virtual;
procedure SetIMPORTE_TOTALValue(const aValue: Currency); virtual;
procedure SetIMPORTE_TOTALIsNull(const aValue: Boolean); virtual;
{ Properties }
property ID_PEDIDO : Integer read GetID_PEDIDOValue write SetID_PEDIDOValue;
property ID_PEDIDOIsNull : Boolean read GetID_PEDIDOIsNull write SetID_PEDIDOIsNull;
property OldID_PEDIDO : Integer read GetOldID_PEDIDOValue;
property OldID_PEDIDOIsNull : Boolean read GetOldID_PEDIDOIsNull;
property ID_ARTICULO : Integer read GetID_ARTICULOValue write SetID_ARTICULOValue;
property ID_ARTICULOIsNull : Boolean read GetID_ARTICULOIsNull write SetID_ARTICULOIsNull;
property OldID_ARTICULO : Integer read GetOldID_ARTICULOValue;
property OldID_ARTICULOIsNull : Boolean read GetOldID_ARTICULOIsNull;
property CANT_PEDIDA_CLIENTE : Currency read GetCANT_PEDIDA_CLIENTEValue write SetCANT_PEDIDA_CLIENTEValue;
property CANT_PEDIDA_CLIENTEIsNull : Boolean read GetCANT_PEDIDA_CLIENTEIsNull write SetCANT_PEDIDA_CLIENTEIsNull;
property OldCANT_PEDIDA_CLIENTE : Currency read GetOldCANT_PEDIDA_CLIENTEValue;
property OldCANT_PEDIDA_CLIENTEIsNull : Boolean read GetOldCANT_PEDIDA_CLIENTEIsNull;
property ID_PROVEEDOR : Integer read GetID_PROVEEDORValue write SetID_PROVEEDORValue;
property ID_PROVEEDORIsNull : Boolean read GetID_PROVEEDORIsNull write SetID_PROVEEDORIsNull;
property OldID_PROVEEDOR : Integer read GetOldID_PROVEEDORValue;
property OldID_PROVEEDORIsNull : Boolean read GetOldID_PROVEEDORIsNull;
property CANT_PEDIDA_PROVEEDOR : Integer read GetCANT_PEDIDA_PROVEEDORValue write SetCANT_PEDIDA_PROVEEDORValue;
property CANT_PEDIDA_PROVEEDORIsNull : Boolean read GetCANT_PEDIDA_PROVEEDORIsNull write SetCANT_PEDIDA_PROVEEDORIsNull;
property OldCANT_PEDIDA_PROVEEDOR : Integer read GetOldCANT_PEDIDA_PROVEEDORValue;
property OldCANT_PEDIDA_PROVEEDORIsNull : Boolean read GetOldCANT_PEDIDA_PROVEEDORIsNull;
property CANT_PENDIENTE_PEDIR : Currency read GetCANT_PENDIENTE_PEDIRValue write SetCANT_PENDIENTE_PEDIRValue;
property CANT_PENDIENTE_PEDIRIsNull : Boolean read GetCANT_PENDIENTE_PEDIRIsNull write SetCANT_PENDIENTE_PEDIRIsNull;
property OldCANT_PENDIENTE_PEDIR : Currency read GetOldCANT_PENDIENTE_PEDIRValue;
property OldCANT_PENDIENTE_PEDIRIsNull : Boolean read GetOldCANT_PENDIENTE_PEDIRIsNull;
property CONCEPTO : String read GetCONCEPTOValue write SetCONCEPTOValue;
property CONCEPTOIsNull : Boolean read GetCONCEPTOIsNull write SetCONCEPTOIsNull;
property OldCONCEPTO : String read GetOldCONCEPTOValue;
property OldCONCEPTOIsNull : Boolean read GetOldCONCEPTOIsNull;
property IMPORTE_UNIDAD : Currency read GetIMPORTE_UNIDADValue write SetIMPORTE_UNIDADValue;
property IMPORTE_UNIDADIsNull : Boolean read GetIMPORTE_UNIDADIsNull write SetIMPORTE_UNIDADIsNull;
property OldIMPORTE_UNIDAD : Currency read GetOldIMPORTE_UNIDADValue;
property OldIMPORTE_UNIDADIsNull : Boolean read GetOldIMPORTE_UNIDADIsNull;
property DESCUENTO : Float read GetDESCUENTOValue write SetDESCUENTOValue;
property DESCUENTOIsNull : Boolean read GetDESCUENTOIsNull write SetDESCUENTOIsNull;
property OldDESCUENTO : Float read GetOldDESCUENTOValue;
property OldDESCUENTOIsNull : Boolean read GetOldDESCUENTOIsNull;
property IMPORTE_TOTAL : Currency read GetIMPORTE_TOTALValue write SetIMPORTE_TOTALValue;
property IMPORTE_TOTALIsNull : Boolean read GetIMPORTE_TOTALIsNull write SetIMPORTE_TOTALIsNull;
property OldIMPORTE_TOTAL : Currency read GetOldIMPORTE_TOTALValue;
property OldIMPORTE_TOTALIsNull : Boolean read GetOldIMPORTE_TOTALIsNull;
public
constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
@ -2681,7 +2872,7 @@ begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvID_PROVEEDOR] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetCANT_PEDIDA_PROVEEDORValue: Currency;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetCANT_PEDIDA_PROVEEDORValue: Integer;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR];
end;
@ -2691,7 +2882,7 @@ begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetOldCANT_PEDIDA_PROVEEDORValue: Currency;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetOldCANT_PEDIDA_PROVEEDORValue: Integer;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR];
end;
@ -2701,7 +2892,7 @@ begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.SetCANT_PEDIDA_PROVEEDORValue(const aValue: Currency);
procedure TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.SetCANT_PEDIDA_PROVEEDORValue(const aValue: Integer);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCANT_PEDIDA_PROVEEDOR] := aValue;
end;
@ -2743,6 +2934,452 @@ begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCANT_PENDIENTE_PEDIR] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetCONCEPTOValue: String;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetCONCEPTOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetOldCONCEPTOValue: String;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetOldCONCEPTOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.SetCONCEPTOValue(const aValue: String);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.SetCONCEPTOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvCONCEPTO] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetIMPORTE_UNIDADValue: Currency;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetIMPORTE_UNIDADIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetOldIMPORTE_UNIDADValue: Currency;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetOldIMPORTE_UNIDADIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.SetIMPORTE_UNIDADValue(const aValue: Currency);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.SetIMPORTE_UNIDADIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_UNIDAD] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetDESCUENTOValue: Float;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetDESCUENTOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetOldDESCUENTOValue: Float;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetOldDESCUENTOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.SetDESCUENTOValue(const aValue: Float);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.SetDESCUENTOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvDESCUENTO] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetIMPORTE_TOTALValue: Currency;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetIMPORTE_TOTALIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetOldIMPORTE_TOTALValue: Currency;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.GetOldIMPORTE_TOTALIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.SetIMPORTE_TOTALValue(const aValue: Currency);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules.SetIMPORTE_TOTALIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvIMPORTE_TOTAL] := Null;
end;
{ TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules }
constructor TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin
inherited;
end;
destructor TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.Destroy;
begin
inherited;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetID_PEDIDOValue: Integer;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetID_PEDIDOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldID_PEDIDOValue: Integer;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldID_PEDIDOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetID_PEDIDOValue(const aValue: Integer);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetID_PEDIDOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PEDIDO] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetID_ARTICULOValue: Integer;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetID_ARTICULOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldID_ARTICULOValue: Integer;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldID_ARTICULOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetID_ARTICULOValue(const aValue: Integer);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetID_ARTICULOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_ARTICULO] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetCANT_PEDIDA_CLIENTEValue: Currency;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetCANT_PEDIDA_CLIENTEIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldCANT_PEDIDA_CLIENTEValue: Currency;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldCANT_PEDIDA_CLIENTEIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetCANT_PEDIDA_CLIENTEValue(const aValue: Currency);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetCANT_PEDIDA_CLIENTEIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_CLIENTE] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetID_PROVEEDORValue: Integer;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetID_PROVEEDORIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldID_PROVEEDORValue: Integer;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldID_PROVEEDORIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetID_PROVEEDORValue(const aValue: Integer);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetID_PROVEEDORIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosID_PROVEEDOR] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetCANT_PEDIDA_PROVEEDORValue: Integer;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetCANT_PEDIDA_PROVEEDORIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldCANT_PEDIDA_PROVEEDORValue: Integer;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldCANT_PEDIDA_PROVEEDORIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetCANT_PEDIDA_PROVEEDORValue(const aValue: Integer);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetCANT_PEDIDA_PROVEEDORIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PEDIDA_PROVEEDOR] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetCANT_PENDIENTE_PEDIRValue: Currency;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetCANT_PENDIENTE_PEDIRIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldCANT_PENDIENTE_PEDIRValue: Currency;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldCANT_PENDIENTE_PEDIRIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetCANT_PENDIENTE_PEDIRValue(const aValue: Currency);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetCANT_PENDIENTE_PEDIRIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCANT_PENDIENTE_PEDIR] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetCONCEPTOValue: String;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetCONCEPTOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldCONCEPTOValue: String;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldCONCEPTOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetCONCEPTOValue(const aValue: String);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetCONCEPTOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosCONCEPTO] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetIMPORTE_UNIDADValue: Currency;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetIMPORTE_UNIDADIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldIMPORTE_UNIDADValue: Currency;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldIMPORTE_UNIDADIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetIMPORTE_UNIDADValue(const aValue: Currency);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetIMPORTE_UNIDADIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_UNIDAD] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetDESCUENTOValue: Float;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetDESCUENTOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldDESCUENTOValue: Float;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldDESCUENTOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetDESCUENTOValue(const aValue: Float);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetDESCUENTOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDESCUENTO] := Null;
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetIMPORTE_TOTALValue: Currency;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetIMPORTE_TOTALIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL]);
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldIMPORTE_TOTALValue: Currency;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL];
end;
function TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.GetOldIMPORTE_TOTALIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL]);
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetIMPORTE_TOTALValue(const aValue: Currency);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL] := aValue;
end;
procedure TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules.SetIMPORTE_TOTALIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosIMPORTE_TOTAL] := Null;
end;
initialization
RegisterBusinessProcessorRules(RID_ListaAnosPedidosDelta, TListaAnosPedidosBusinessProcessorRules);
@ -2750,5 +3387,6 @@ initialization
RegisterBusinessProcessorRules(RID_PedidosCliente_DetallesDelta, TPedidosCliente_DetallesBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PedidosCliente_Articulos_PendientesDelta, TPedidosCliente_Articulos_PendientesBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PedidoCliente_ArticulosPendientesPedirAProvDelta, TPedidoCliente_ArticulosPendientesPedirAProvBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDelta, TPedidoCliente_ArticulosPendientesPedirAProvNoArticulosBusinessProcessorRules);
end.

View File

@ -14,6 +14,7 @@ const
SITUACION_PEDIDO_PENDIENTE = 'PENDIENTE';
SITUACION_PEDIDO_ENPROCESO = 'EN PROCESO';
SITUACION_PEDIDO_SERVIDO = 'SERVIDO';
SITUACION_PEDIDO_ALBARANADO = 'ALBARANADO';
type
IBizPedidoCliente = interface(IPedidosCliente)
@ -158,8 +159,9 @@ begin
with Result do
begin
Add(SITUACION_PEDIDO_PENDIENTE);
Add(SITUACION_PEDIDO_ENPROCESO);
Add(SITUACION_PEDIDO_SERVIDO);
// Add(SITUACION_PEDIDO_ENPROCESO);
// Add(SITUACION_PEDIDO_SERVIDO);
Add(SITUACION_PEDIDO_ALBARANADO);
end;
end;

View File

@ -14,4 +14,4 @@ END
/* C:\Codigo\Source\Modulos\Pedidos de cliente\Plugin\uPluginPedidosCliente.dfm */
/* C:\Codigo\Source\Modulos\Pedidos de cliente\Plugin\PedidosCliente_plugin.RES */
/* c:\temp\dtf124.tmp */
/* c:\temp\dtf8CF.tmp */

View File

@ -53,7 +53,7 @@ end;
constructor TPluginPedidosCliente.Create(AOwner: TComponent);
begin
inherited;
ModuleName := MODULENAME_PEDIDOS_PROVEEDOR;
ModuleName := MODULENAME_PEDIDOS_CLIENTE;
uPedidosClienteViewRegister.RegisterViews;
end;

View File

@ -591,16 +591,23 @@ object srvPedidosCliente: TsrvPedidosCliente
Params = <
item
Name = 'ID'
Value = '41'
Value = '1138'
ParamType = daptInput
end>
Statements = <
item
Connection = 'IBX'
SQL =
'SELECT'#10' ID_PEDIDO, ID_ARTICULO, CANT_PEDIDA_CLIENTE, ID_PROVE' +
'EDOR,'#10' CANT_PEDIDA_PROVEEDOR, CANT_PENDIENTE_PEDIR'#10' FROM'#10' ' +
' V_PED_CLI_ART_PEND_PEDIR_PROV'#10' WHERE ID_PEDIDO = :ID'#10
'SELECT PEDIDOS_CLIENTE_DETALLES.id_pedido, PEDIDOS_CLIENTE_DETA' +
'LLES.id_articulo,'#10'PEDIDOS_CLIENTE_DETALLES.CANTIDAD as CANT_PEDI' +
'DA_CLIENTE, articulos.id_PROVEEDOR,'#10'0 as CANT_PEDIDA_PROVEEDOR, ' +
'PEDIDOS_CLIENTE_DETALLES.CANTIDAD as CANT_PENDIENTE_PEDIR,'#10'PEDID' +
'OS_CLIENTE_DETALLES.CONCEPTO,'#10'PEDIDOS_CLIENTE_DETALLES.importe_u' +
'nidad, PEDIDOS_CLIENTE_DETALLES.descuento, PEDIDOS_CLIENTE_DETAL' +
'LES.importe_total'#10#10'FROM PEDIDOS_CLIENTE_DETALLES'#10'left join artic' +
'ulos on (articulos.id = PEDIDOS_CLIENTE_DETALLES.id_articulo)'#10'wh' +
'ere id_pedido =:ID'#10'and PEDIDOS_CLIENTE_DETALLES.id_articulo is n' +
'ot null'#10'order by ARTICULOS.ID_PROVEEDOR'#10#10#10#10#10#10
StatementType = stSQL
ColumnMappings = <
item
@ -626,6 +633,22 @@ object srvPedidosCliente: TsrvPedidosCliente
item
DatasetField = 'CANT_PENDIENTE_PEDIR'
TableField = 'CANT_PENDIENTE_PEDIR'
end
item
DatasetField = 'CONCEPTO'
TableField = 'CONCEPTO'
end
item
DatasetField = 'IMPORTE_UNIDAD'
TableField = 'IMPORTE_UNIDAD'
end
item
DatasetField = 'DESCUENTO'
TableField = 'DESCUENTO'
end
item
DatasetField = 'IMPORTE_TOTAL'
TableField = 'IMPORTE_TOTAL'
end>
end>
Name = 'PedidoCliente_ArticulosPendientesPedirAProv'
@ -649,11 +672,137 @@ object srvPedidosCliente: TsrvPedidosCliente
end
item
Name = 'CANT_PEDIDA_PROVEEDOR'
DataType = datCurrency
DataType = datInteger
end
item
Name = 'CANT_PENDIENTE_PEDIR'
DataType = datCurrency
end
item
Name = 'CONCEPTO'
DataType = datString
Size = 2000
end
item
Name = 'IMPORTE_UNIDAD'
DataType = datCurrency
end
item
Name = 'DESCUENTO'
DataType = datFloat
end
item
Name = 'IMPORTE_TOTAL'
DataType = datCurrency
end>
end
item
Params = <
item
Name = 'ID'
Value = '1138'
ParamType = daptInput
end>
Statements = <
item
Connection = 'IBX'
SQL =
'SELECT PEDIDOS_CLIENTE_DETALLES.id_pedido, PEDIDOS_CLIENTE_DETA' +
'LLES.id_articulo,'#10'PEDIDOS_CLIENTE_DETALLES.CANTIDAD as CANT_PEDI' +
'DA_CLIENTE, articulos.id_PROVEEDOR,'#10'0 as CANT_PEDIDA_PROVEEDOR, ' +
'PEDIDOS_CLIENTE_DETALLES.CANTIDAD as CANT_PENDIENTE_PEDIR,'#10'PEDID' +
'OS_CLIENTE_DETALLES.CONCEPTO,'#10'PEDIDOS_CLIENTE_DETALLES.importe_u' +
'nidad, PEDIDOS_CLIENTE_DETALLES.descuento, PEDIDOS_CLIENTE_DETAL' +
'LES.importe_total'#10#10'FROM PEDIDOS_CLIENTE_DETALLES'#10'left join artic' +
'ulos on (articulos.id = PEDIDOS_CLIENTE_DETALLES.id_articulo)'#10'wh' +
'ere id_pedido =:ID'#10'and PEDIDOS_CLIENTE_DETALLES.id_articulo is n' +
'ull'#10'order by ARTICULOS.ID_PROVEEDOR'#10#10#10#10#10#10
StatementType = stSQL
ColumnMappings = <
item
DatasetField = 'ID_ARTICULO'
TableField = 'ID_ARTICULO'
end
item
DatasetField = 'ID_PEDIDO'
TableField = 'ID_PEDIDO'
end
item
DatasetField = 'CANT_PEDIDA_CLIENTE'
TableField = 'CANT_PEDIDA_CLIENTE'
end
item
DatasetField = 'ID_PROVEEDOR'
TableField = 'ID_PROVEEDOR'
end
item
DatasetField = 'CANT_PEDIDA_PROVEEDOR'
TableField = 'CANT_PEDIDA_PROVEEDOR'
end
item
DatasetField = 'CANT_PENDIENTE_PEDIR'
TableField = 'CANT_PENDIENTE_PEDIR'
end
item
DatasetField = 'CONCEPTO'
TableField = 'CONCEPTO'
end
item
DatasetField = 'IMPORTE_UNIDAD'
TableField = 'IMPORTE_UNIDAD'
end
item
DatasetField = 'DESCUENTO'
TableField = 'DESCUENTO'
end
item
DatasetField = 'IMPORTE_TOTAL'
TableField = 'IMPORTE_TOTAL'
end>
end>
Name = 'PedidoCliente_ArticulosPendientesPedirAProvNoArticulos'
Fields = <
item
Name = 'ID_PEDIDO'
DataType = datInteger
end
item
Name = 'ID_ARTICULO'
DataType = datInteger
DictionaryEntry = 'PedidosProveedor_Detalles_ID_ARTICULO'
end
item
Name = 'CANT_PEDIDA_CLIENTE'
DataType = datCurrency
end
item
Name = 'ID_PROVEEDOR'
DataType = datInteger
end
item
Name = 'CANT_PEDIDA_PROVEEDOR'
DataType = datInteger
end
item
Name = 'CANT_PENDIENTE_PEDIR'
DataType = datCurrency
end
item
Name = 'CONCEPTO'
DataType = datString
Size = 2000
end
item
Name = 'IMPORTE_UNIDAD'
DataType = datCurrency
end
item
Name = 'DESCUENTO'
DataType = datFloat
end
item
Name = 'IMPORTE_TOTAL'
DataType = datCurrency
end>
end>
JoinDataTables = <>

View File

@ -26,4 +26,4 @@ END
/* C:\Codigo\Source\Modulos\Pedidos de cliente\Views\uEditorElegirArticulosPedidoCliente.dfm */
/* C:\Codigo\Source\Modulos\Pedidos de cliente\Views\uEditorDireccionEntregaPedidoCliente.dfm */
/* C:\Codigo\Source\Modulos\Pedidos de cliente\Views\PedidosCliente_view.RES */
/* c:\temp\dtf122.tmp */
/* c:\temp\dtf8CD.tmp */

View File

@ -5,6 +5,7 @@ inherited fEditorPedidosCliente: TfEditorPedidosCliente
ClientWidth = 700
Position = poDesigned
ExplicitWidth = 708
ExplicitHeight = 240
PixelsPerInch = 96
TextHeight = 13
inherited JvNavPanelHeader: TJvNavPanelHeader
@ -156,22 +157,26 @@ inherited fEditorPedidosCliente: TfEditorPedidosCliente
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitWidth = 243
Width = 243
end
inherited edtFechaFinFiltro: TcxDateEdit
Left = 233
Left = 244
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 233
ExplicitLeft = 244
ExplicitWidth = 482
Width = 482
end
inherited eLista: TcxComboBox
Left = 577
Left = 605
Style.LookAndFeel.SkinName = ''
StyleDisabled.LookAndFeel.SkinName = ''
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 577
ExplicitLeft = 605
ExplicitWidth = 140
Width = 140
end
@ -2034,10 +2039,7 @@ inherited fEditorPedidosCliente: TfEditorPedidosCliente
Value = 100
Default = True
Info.Strings = (
'Se generar'#225' un albar'#225'n de cliente basado en este pedido. Solo se' +
' tendr'#225'n en cuenta aquellos art'#237'culos que existan en el cat'#225'logo' +
' y sean inventariables.'
'Se generar'#225' un albar'#225'n de cliente basado en este pedido.'
'')
end
item
@ -2046,7 +2048,7 @@ inherited fEditorPedidosCliente: TfEditorPedidosCliente
Info.Strings = (
'Generar pedidos a los proveedores con los art'#237'culos de este pedi' +
'do que existan en el cat'#225'logo y sean inventariables.')
'do.')
end>
ButtonBar.Buttons = [cbCancel]
MainIcon = tdiCustom

View File

@ -210,7 +210,7 @@ begin
(Sender as TAction).Enabled := HayDatos and
not (ViewGrid.NumSeleccionados > 1) and
ViewGrid.esSeleccionCeldaDatos and
(FPedidos.SITUACION <> SITUACION_PEDIDO_SERVIDO);
((FPedidos.SITUACION <> SITUACION_PEDIDO_SERVIDO) and (FPedidos.SITUACION <> SITUACION_PEDIDO_ALBARANADO));
end;
procedure TfEditorPedidosCliente.actInformesExecute(Sender: TObject);

View File

@ -97,6 +97,10 @@ inherited frViewPedidosCliente: TfrViewPedidosCliente
DataBinding.FieldName = 'FECHA_PREVISTA_ENVIO'
Width = 44
end
object cxGridViewREFERENCIA_CLIENTE: TcxGridDBColumn
Caption = 'Ref. Cliente'
DataBinding.FieldName = 'REFERENCIA_CLIENTE'
end
object cxGridViewNOMBRE: TcxGridDBColumn
Caption = 'Cliente'
DataBinding.FieldName = 'NOMBRE'
@ -155,10 +159,7 @@ inherited frViewPedidosCliente: TfrViewPedidosCliente
Caption = 'Pendientes'
end
object cxGridLevel2: TcxGridLevel
Caption = 'En proceso'
end
object cxGridLevel3: TcxGridLevel
Caption = 'Servidos'
Caption = 'Albaranado'
end
end
inherited frViewFiltroBase1: TfrViewFiltroBase
@ -202,6 +203,8 @@ inherited frViewPedidosCliente: TfrViewPedidosCliente
StyleFocused.LookAndFeel.SkinName = ''
StyleHot.LookAndFeel.SkinName = ''
ExplicitLeft = 673
ExplicitWidth = 215
Width = 215
end
end
inherited TBXAlignmentPanel1: TTBXAlignmentPanel

View File

@ -26,7 +26,6 @@ type
cxGridDBTableView1: TcxGridDBTableView;
cxGridLevel1: TcxGridLevel;
cxGridLevel2: TcxGridLevel;
cxGridLevel3: TcxGridLevel;
cxGridViewREFERENCIA: TcxGridDBColumn;
cxGridViewINCIDENCIASACTIVAS: TcxGridDBColumn;
cxGridViewNOMBRE: TcxGridDBColumn;
@ -50,6 +49,7 @@ type
cxGridViewINCIDENCIAS: TcxGridDBColumn;
cxGridViewNUM_COPIAS: TcxGridDBColumn;
cxGridViewNUM_CORREOS: TcxGridDBColumn;
cxGridViewREFERENCIA_CLIENTE: TcxGridDBColumn;
procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel:
TcxGridLevel);
procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView;
@ -146,8 +146,9 @@ begin
case cxGrid.ActiveLevel.Index of
1 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_PENDIENTE, SITUACION_PEDIDO_PENDIENTE);
2 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_ENPROCESO, SITUACION_PEDIDO_ENPROCESO);
3 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_SERVIDO, SITUACION_PEDIDO_SERVIDO);
2 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_ALBARANADO, SITUACION_PEDIDO_ALBARANADO);
// 2 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_ENPROCESO, SITUACION_PEDIDO_ENPROCESO);
// 3 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_SERVIDO, SITUACION_PEDIDO_SERVIDO);
end;
end;
@ -275,6 +276,8 @@ begin
else if ASituacion = SITUACION_PEDIDO_ENPROCESO then
AStyle := cxStyleENPROCESO
else if ASituacion = SITUACION_PEDIDO_SERVIDO then
AStyle := cxStyleSERVIDO
else if ASituacion = SITUACION_PEDIDO_ALBARANADO then
AStyle := cxStyleSERVIDO;
end;
end;

View File

@ -69,6 +69,70 @@ begin
AAlbaran.FECHA_PREVISTA_ENVIO := APedido.FECHA_PREVISTA_ENVIO;
end;
procedure CopiarDetallesAAlbaran(
APedido: IBizPedidoCliente;
AAlbaran: IBizAlbaranCliente;
AArticulos: IBizDetallesPedidoCliente);
var
i : integer;
ADetalles : IBizDetallesAlbaranCliente;
ADetallesController : IDetallesAlbaranClienteController;
begin
if not Assigned(AAlbaran) then
raise Exception.Create ('Albaran no asignado(CopiarDetallesAAlbaran)');
if not Assigned(APedido) then
raise Exception.Create ('Pedido 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 CopiarArticulosPendAAlbaran(
APedido: IBizPedidoCliente;
AAlbaran: IBizAlbaranCliente;
@ -206,6 +270,7 @@ begin
Inicializar;
try
{
AArticulosPendientes := APedidosClienteController.ArticulosPendientes(APedido.ID);
if not Assigned(AArticulosPendientes) then
raise Exception.Create('Error al recuperar los artículos sin albarán del pedido (GenerarAlbaranCli)');
@ -216,10 +281,12 @@ begin
ShowWarningMessage('Generar albarán a partir del pedido', 'Todos los artículos de este pedido ya figuran en uno o más albaranes de cliente. Por lo que no se pueden generar nuevos albaranes para este pedido');
Exit; // Aunque es un exit, se ejecuta la parte del finally antes de salir.
end;
}
AuxAlbaran := AAlbaranesClienteController.Nuevo;
CopiarPedidoAAlbaran(APedido, AuxAlbaran);
CopiarArticulosPendAAlbaran(APedido, AuxAlbaran, AArticulosPendientes);
// CopiarArticulosPendAAlbaran(APedido, AuxAlbaran, AArticulosPendientes);
CopiarDetallesAAlbaran(APedido, AuxAlbaran, APedido.Detalles);
//Sustituir por if de guardar
if AAlbaranesClienteController.Guardar(AuxAlbaran) then
@ -246,7 +313,7 @@ begin
Result := True;
finally
AArticulosPendientes := NIL;
// AArticulosPendientes := NIL;
if Assigned(APedidosClienteController) then
Finalizar;
end;

View File

@ -302,4 +302,320 @@ object dmGenerarPedidosProv: TdmGenerarPedidosProv
Left = 40
Top = 16
end
object JsListaArticulosSinProveedor: TJSDialog
Glyph.Data = {
0B546478504E47496D61676589504E470D0A1A0A0000000D494844520000001C
0000001C0806000000720DDF94000000017352474200AECE1CE9000000046741
4D410000B18F0BFC6105000000206348524D00007A26000080840000FA000000
80E8000075300000EA6000003A98000017709CBA513C00000009704859730000
0AEA00000AEA0150CCEFBE000004CE49444154484BBDD67F50D3751CC7F12FE3
57DA2576E41919D28F3941C656271A982C08952B03059193CC5444D24E44C008
8F08C323E48708D655C60F393DA5D3ABCCC34A0B4DB3E4C7F8A10213D94070FC
DA2F366243FFE8FBEAF3FD22935F1B5B1771F7FD737BECF979BFF7191400CADA
BFB4348AD372C4A390BCD2C6DAD752FF06D47FB6709DEC9B80BF8F25506BA71D
3C7D9AB2D51DE7D7EB15B9F82163A618A4D62AD4DA4255DEA270437D0C8634D9
905C5C4E97245261D3068A8F52F6DAE35EF50FB45F41AF4C81B6633BA974A849
7B8DB2B318B5A6507998BF565F17431BD49918542463B0772F1ACBBDE8A2382B
6669290866762784E207DA2F8DD85F3D7BA069DB84739F3AD6595C69293890E7
B1C650B71D72E97EECDA198C8D914178FFBD37D07E2B1A4DE59E288AA7D65974
AC1683A59EB54C5DC627E1F0F7F787482482AFAF2F529383A06E8DC0B90C879B
FF193870C83DD450174316251DE9A96146CCDBDB1B49F101E86FDF04C979771C
DD4D6D98129DAA90F99E694B1789EF933A6666FB53D6B0650C2610089018EB47
E61809A56435CE673ADE22B790F98D9D0A5465F343F5B5D1F460DFC718E8DA85
93C5E146CCC3C303854702A1964690630D43D3D9F9F4D77154A4D94A732073AB
684BBDC4F7359FB3984EBE0395156FB3650CB66001170D5742584C7527047D4D
2BF063D6638DA7D7530E265173A0F2B070ADBE761B3DD89BC262DACE6828A59B
B174091F5C2E173E4B79464CD9B21A0A491024E52FD2457BA84D5683E453DAEA
8E09AA86D405464C7B770BBB205B367AC3CDCD0D3BA3846CD908D6D71C88EEBA
25F8E9A0BDC464A5A9425DAEE75B86DA28B228C96CD908A69145223FD30F2E2E
2E28CCF781F2F670595FD3EBE86D14A1E7A62F9ACFCE45713CB575D2CAC940E6
F76EA0445033A4CA9F80A9A5EBF1F39940383B3BA3E23BD128CC8FC57A1A9640
5EBD0817B2EC5BD3269BE564A02687BFDA20DE4A0F74278D296330756B287A9B
83F1F4DCD9E8695CF9B0EC11D65DFF12BA6A3DD1FCBD335D1CCFD936A1723C48
FE01B0D116F26B87D4F9E86767F60E34B20D64F5D74345307666B7DF04F779A7
3158778337463079CD42745E77C3C56CFBF68258CA710C3A1E54667985E8C551
F4803CD124A690AC328BDDAB7A019D95F349E52CBA3481B3D324C8DC2ABA22CF
AA21551E6DAA4C7E63150EA404206EC732A4EF5B8CF6EAB1652358C79F2E68BF
EA4CFF9A632F4B8BA1661AD1D1859A3CAF357A323BDDBDDD638FB165F81899B2
FCCC00F66A130A85E0F178484DE0B13393D7F0301ABB7B6D0EDA7F9F8DE66F67
D027F67262278097C91DD85FE2556950E48CC3828D18B3FAFBE29719B179F3E6
6173C43393604FB158DB95C721AD704045AE5D475614F5048B8E146A0EBF1CA2
AFDE426B3B63C982840F2F48CB682C00BDB7FC5090E14DAEB4056030272727A4
C6CD1D57F608935D7684F412078D676CE953499CDD4690B955B4C582EB064596
196C39F99EF980D9C6535F78E040921B4A0E3DFB10730533B3BBD7087675B86C
0493565068FD85C2A543765D6C2553A8C91104EBAEAEA4552DEF928A15E8BD19
809E1B22F2E6AF92ABEA1532A3C5E4D884B857CD4767953B59792E3AFE788E00
AEE4E85C0830076DBF3D09D9A559E4086710C001772E7270E702657C9ACA6CE9
B20F391FB0E0ED6CD7ECB28F6C6A4EA650D3FA14C7DB9C65C1FFF3F90772E0BD
22E5E8ABC20000000049454E44AE426082}
Instruction.Text = 'Lista de art'#237'culos no incluidos, por no tener proveedor asignado'
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
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 = 40
Top = 72
end
end

View File

@ -3,11 +3,12 @@ unit uGenerarPedidosProvUtils;
interface
uses
SysUtils, Classes, uBizPedidosCliente, pngimage, JSDialog;
SysUtils, Classes, uBizPedidosCliente, pngimage, JSDialog, dxGDIPlusClasses;
type
TdmGenerarPedidosProv = class(TDataModule)
JsListaPedidosGenerados: TJSDialog;
JsListaArticulosSinProveedor: TJSDialog;
end;
function GenerarPedidosProv(const IDPedido : Integer) : Boolean; overload;
@ -19,10 +20,10 @@ implementation
{$R *.dfm}
uses
uDialogUtils,
uDialogUtils, Windows, uRTFUtils,
uPedidosClienteController, uPedidosProveedorController, uProveedoresController,
uDetallesPedidoProveedorController, uControllerDetallesBase,
uBizPedidosProveedor, uBizContactos, schPedidosProveedorClient_Intf;
uBizPedidosProveedor, uBizDetallesPedidoProveedor, uBizContactos, schPedidosProveedorClient_Intf;
var
dmGenerarPedidosProv: TdmGenerarPedidosProv;
@ -50,6 +51,49 @@ begin
AProveedoresController := nil;
end;
procedure AnadirLineasNoArticulos(AOrigen: IBizPedidoClienteArticulosPendientesPedirAProv;
ADestino : IBizDetallesPedidoProveedor);
var
i : integer;
begin
if not Assigned(AOrigen) then
raise Exception.Create ('Origen no asignado (AnadirLineasNoArticulos)');
if not Assigned(ADestino) then
raise Exception.Create ('Destino no asignado (AnadirLineasNoArticulos)');
if not AOrigen.DataTable.Active then
AOrigen.DataTable.Active := True;
if not ADestino.DataTable.Active then
ADestino.DataTable.Active := True;
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
ADetallesPedidosProvController.BeginUpdate(ADestino);
AOrigen.DataTable.First;
for i := 0 to AOrigen.DataTable.RecordCount - 1 do
begin
ADetallesPedidosProvController.Add(ADestino, TIPO_DETALLE_CONCEPTO);
ADestino.Edit;
ADestino.CONCEPTO := AOrigen.CONCEPTO;
ADestino.CANTIDAD := AOrigen.CANT_PENDIENTE_PEDIR;
// ADestino.IMPORTE_UNIDAD := AOrigen.IMPORTE_UNIDAD;
// ADestino.IMPORTE_TOTAL := AOrigen.IMPORTE_TOTAL;
// ADestino.DESCUENTO := AOrigen.DESCUENTO;
// ADestino.IMPORTE_PORTE := AOrigen.IMPORTE_PORTE;
ADestino.Post;
AOrigen.Next;
end;
finally
ADetallesPedidosProvController.EndUpdate(ADestino);
end;
end;
function GenerarPedidosProv(const IDPedido : Integer) : Boolean; overload;
var
@ -74,7 +118,10 @@ function GenerarPedidosProv(APedidoCli : IBizPedidoCliente) : Boolean; overload;
var
APedidoProv : IBizPedidoProveedor;
AArticulosPend : IBizPedidoClienteArticulosPendientesPedirAProv;
AArticulosPendNoArticulos : IBizPedidoClienteArticulosPendientesPedirAProv;
bAnadirNoArticulos: Boolean;
ALista : TStringList;
AListaArticulosSinProveedor : TStringList;
begin
Result := False;
@ -88,20 +135,31 @@ begin
Inicializar;
AArticulosPend := APedidosClienteController.BuscarPendientesPedir(APedidoCli.ID);
if not Assigned(AArticulosPend) then
AArticulosPendNoArticulos := APedidosClienteController.BuscarPendientesPedirNoArticulos(APedidoCli.ID);
if not Assigned(AArticulosPend)
or not Assigned(AArticulosPendNoArticulos) then
raise Exception.Create('Error al recuperar la lista de artículos pendientes de pedir (GenerarPedidosProv)');
ALista := TStringList.Create;
AListaArticulosSinProveedor := TStringList.Create;
try
if not AArticulosPend.DataTable.Active then
AArticulosPend.DataTable.Active := True;
if AArticulosPend.DataTable.RecordCount = 0 then
if not AArticulosPendNoArticulos.DataTable.Active then
AArticulosPendNoArticulos.DataTable.Active := True;
if (AArticulosPend.DataTable.RecordCount = 0)
and (AArticulosPendNoArticulos.DataTable.RecordCount = 0) then
begin
ShowInfoMessage('Este pedido a cliente no tiene artículos pendientes que se tengan que pedir a los proveedores');
Exit;
end;
bAnadirNoArticulos := False;
if (AArticulosPendNoArticulos.DataTable.RecordCount > 0) then
bAnadirNoArticulos := (ShowConfirmMessage('Articulos', 'Desea añadir en el/los pedido/s a proveedor las lineas que no se corresponden con artículos (lineas texto libre)') = IDYES);
APedidoProv := NIL;
AArticulosPend.DataTable.First;
while not AArticulosPend.DataTable.EOF do
@ -109,6 +167,7 @@ begin
if Assigned(APedidoProv) and
(AArticulosPend.ID_PROVEEDOR <> APedidoProv.ID_PROVEEDOR) then
begin
AnadirLineasNoArticulos(AArticulosPendNoArticulos, APedidoProv.Detalles);
APedidosProveedorController.Guardar(APedidoProv);
ALista.Add(APedidoProv.REFERENCIA + ': ' + APedidoProv.NOMBRE);
APedidoProv := NIL;
@ -118,8 +177,14 @@ begin
begin
APedidoProv := APedidosProveedorController.Nuevo;
APedidoProv.Edit;
while (AArticulosPend.ID_PROVEEDOR = 0) do
begin
AListaArticulosSinProveedor.Add(RtfToText(AArticulosPend.CONCEPTO));
AArticulosPend.Next;
end;
APedidoProv.Proveedor := (AProveedoresController.Buscar(AArticulosPend.ID_PROVEEDOR) as IBizProveedor);
APedidoProv.ID_PEDIDO_CLIENTE := APedidoCli.ID;
APedidoProv.REFERENCIA_CLIENTE := APedidoCli.REFERENCIA_CLIENTE;
end;
//OJO IMPORTANTE
@ -132,6 +197,7 @@ begin
with APedidoProv.Detalles do
begin
Edit;
CONCEPTO := AArticulosPend.CONCEPTO;
CANTIDAD := AArticulosPend.CANT_PENDIENTE_PEDIR;
Post;
end;
@ -141,11 +207,19 @@ begin
if Assigned(APedidoProv) then
begin
AnadirLineasNoArticulos(AArticulosPendNoArticulos, APedidoProv.Detalles);
APedidosProveedorController.Guardar(APedidoProv);
ALista.Add(APedidoProv.REFERENCIA + ': ' + APedidoProv.NOMBRE);
APedidoProv := NIL;
end;
if AListaArticulosSinProveedor.Count > 0 then
begin
dmGenerarPedidosProv.JsListaArticulosSinProveedor.Content.Clear;
dmGenerarPedidosProv.JsListaArticulosSinProveedor.Content.AddStrings(AListaArticulosSinProveedor);
dmGenerarPedidosProv.JsListaArticulosSinProveedor.Execute;
end;
if ALista.Count > 0 then
begin
dmGenerarPedidosProv.JsListaPedidosGenerados.Content.Clear;
@ -156,6 +230,7 @@ begin
Result := True;
finally
FreeAndNIL(ALista);
FreeAndNIL(AListaArticulosSinProveedor);
AArticulosPend := NIL;
if Assigned(APedidosClienteController) then

View File

@ -74,6 +74,70 @@ begin
AAlbaran.ID_FORMA_PAGO := APedido.ID_FORMA_PAGO;
end;
procedure CopiarDetallesAAlbaran(
APedido: IBizPedidoProveedor;
AAlbaran: IBizAlbaranProveedor;
AArticulos: IBizDetallesPedidoProveedor);
var
i : integer;
ADetalles : IBizDetallesAlbaranProveedor;
ADetallesController : IDetallesAlbaranProveedorController;
begin
if not Assigned(AAlbaran) then
raise Exception.Create ('Albaran no asignado(CopiarDetallesAAlbaran)');
if not Assigned(APedido) then
raise Exception.Create ('Pedido 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 := TDetallesAlbaranProveedorController.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 CopiarArticulosPendAAlbaran(
APedido: IBizPedidoProveedor;
AAlbaran: IBizAlbaranProveedor;
@ -195,7 +259,7 @@ begin
try
if not Assigned(APedidosProveedorController) then
Inicializar;
{
AArticulosPendientes := ADetallesPedidosProveedorController.ArticulosPendientes(APedido.ID);
if not Assigned(AArticulosPendientes) then
raise Exception.Create('Error al recuperar los artículos sin albarán del pedido (GenerarAlbaranProv)');
@ -208,10 +272,11 @@ begin
if (ARespuesta = IDNO) then
Exit; // Aunque es un exit, se ejecuta la parte del finally antes de salir.
end;
}
AAlbaran := AAlbaranesProveedorController.Nuevo;
CopiarPedidoAAlbaran(APedido, AAlbaran);
CopiarArticulosPendAAlbaran(APedido, AAlbaran, AArticulosPendientes);
// CopiarArticulosPendAAlbaran(APedido, AAlbaran, AArticulosPendientes);
CopiarDetallesAAlbaran(APedido, AAlbaran, APedido.Detalles);
//Sustituir por if de guardar
if AAlbaranesProveedorController.Guardar(AAlbaran) then
@ -222,7 +287,7 @@ begin
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 pedido de cliente' + #10#13, [AAlbaran.REFERENCIA]));
Content.Add(Format('Se ha generado correctamente el albarán %s a partir del pedido de proveedor' + #10#13, [AAlbaran.REFERENCIA]));
Execute;
ARespuesta := CustomButtonResult;

View File

@ -1,12 +1,5 @@
inherited fEditorRemesaClientePreview: TfEditorRemesaClientePreview
Caption = 'Previsualizar la remesa'
ExplicitWidth = 660
ExplicitHeight = 494
PixelsPerInch = 96
TextHeight = 13
inherited frxReport1: TfrxReport
Datasets = <>
Variables = <>
Style = <>
end
end

View File

@ -10,7 +10,8 @@ uses
JvFormPlacement, ImgList, PngImageList, StdActns, ActnList, ComCtrls,
TB2ExtItems, TBXExtItems, TBX, TB2Item, TB2Dock, TB2Toolbar, pngimage,
ExtCtrls, JvExControls, JvComponent, JvNavigationPane, uIEditorRemesasClientePreview,
JvExComCtrls, JvStatusBar;
JvExComCtrls, JvStatusBar, frxExportText, frxExportRTF, frxExportMail,
frxExportXLS;
type
TfEditorRemesaClientePreview = class(TfEditorPreview, IEditorRemesasClientePreview)

View File

@ -23,10 +23,12 @@ function DarNumSituacionEquivalente(ASituacion : String) : Integer;
begin
if ASituacion = SITUACION_PEDIDO_PENDIENTE then
Result := 1
else if ASituacion = SITUACION_PEDIDO_ENPROCESO then
else if ASituacion = SITUACION_PEDIDO_ALBARANADO then
Result := 2
else if ASituacion = SITUACION_PEDIDO_SERVIDO then
Result := 3
// else if ASituacion = SITUACION_PEDIDO_ENPROCESO then
// Result := 2
// else if ASituacion = SITUACION_PEDIDO_SERVIDO then
// Result := 3
else
Result := -1;
end;

View File

@ -14,4 +14,4 @@ END
/* C:\Codigo\Source\Modulos\Tienda web\Data\uDataModuleTiendaWeb.dfm */
/* C:\Codigo\Source\Modulos\Tienda web\Data\TiendaWeb_data.res */
/* c:\temp\dtfD2.tmp */
/* c:\temp\dtf87D.tmp */

View File

@ -426,9 +426,7 @@
<Parameters>
<Parameter Name="Result" DataType="Binary" Flag="Result">
</Parameter>
<Parameter Name="ID" DataType="Integer" Flag="In" >
</Parameter>
<Parameter Name="withRefCliente" DataType="Boolean" Flag="In" >
<Parameter Name="ListaID" DataType="TIntegerArray" Flag="In" >
</Parameter>
</Parameters>
</Operation>

View File

@ -616,7 +616,7 @@ type
['{6E910718-9AB0-47BB-9875-B0DE66A68D7A}']
function GenerarInforme(const ListaID: TIntegerArray; const VerPrecios: Boolean; const VerRefProveedor: Boolean; const VerObservaciones: Boolean;
const VerIncidencias: Boolean): Binary;
function GenerarInformeEtiquetas(const ID: Integer; const withRefCliente: Boolean): Binary;
function GenerarInformeEtiquetas(const ListaID: TIntegerArray): Binary;
function GenerarInformeEnPDF(const ListaID: TIntegerArray; const VerPrecios: Boolean; const VerRefProveedor: Boolean; const VerObservaciones: Boolean;
const VerIncidencias: Boolean): Binary;
function DarListaAnos: StringArray;
@ -634,7 +634,7 @@ type
function GenerarInforme(const ListaID: TIntegerArray; const VerPrecios: Boolean; const VerRefProveedor: Boolean; const VerObservaciones: Boolean;
const VerIncidencias: Boolean): Binary;
function GenerarInformeEtiquetas(const ID: Integer; const withRefCliente: Boolean): Binary;
function GenerarInformeEtiquetas(const ListaID: TIntegerArray): Binary;
function GenerarInformeEnPDF(const ListaID: TIntegerArray; const VerPrecios: Boolean; const VerRefProveedor: Boolean; const VerObservaciones: Boolean;
const VerIncidencias: Boolean): Binary;
function DarListaAnos: StringArray;
@ -2215,13 +2215,12 @@ begin
end
end;
function TsrvAlbaranesCliente_Proxy.GenerarInformeEtiquetas(const ID: Integer; const withRefCliente: Boolean): Binary;
function TsrvAlbaranesCliente_Proxy.GenerarInformeEtiquetas(const ListaID: TIntegerArray): Binary;
begin
try
result := nil;
__Message.InitializeRequestMessage(__TransportChannel, 'FactuGES', __InterfaceName, 'GenerarInformeEtiquetas');
__Message.Write('ID', TypeInfo(Integer), ID, []);
__Message.Write('withRefCliente', TypeInfo(Boolean), withRefCliente, []);
__Message.Write('ListaID', TypeInfo(FactuGES_Intf.TIntegerArray), ListaID, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);

View File

@ -1372,19 +1372,18 @@ begin
end;
procedure TsrvAlbaranesCliente_Invoker.Invoke_GenerarInformeEtiquetas(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions);
{ function GenerarInformeEtiquetas(const ID: Integer; const withRefCliente: Boolean): Binary; }
{ function GenerarInformeEtiquetas(const ListaID: TIntegerArray): Binary; }
var
ID: Integer;
withRefCliente: Boolean;
ListaID: FactuGES_Intf.TIntegerArray;
lResult: Binary;
__lObjectDisposer: TROObjectDisposer;
begin
ListaID := nil;
lResult := nil;
try
__Message.Read('ID', TypeInfo(Integer), ID, []);
__Message.Read('withRefCliente', TypeInfo(Boolean), withRefCliente, []);
__Message.Read('ListaID', TypeInfo(FactuGES_Intf.TIntegerArray), ListaID, []);
lResult := (__Instance as IsrvAlbaranesCliente).GenerarInformeEtiquetas(ID, withRefCliente);
lResult := (__Instance as IsrvAlbaranesCliente).GenerarInformeEtiquetas(ListaID);
__Message.InitializeResponseMessage(__Transport, 'FactuGES', 'srvAlbaranesCliente', 'GenerarInformeEtiquetasResponse');
__Message.Write('Result', TypeInfo(Binary), lResult, []);
@ -1394,6 +1393,7 @@ begin
finally
__lObjectDisposer := TROObjectDisposer.Create(__Instance);
try
__lObjectDisposer.Add(ListaID);
__lObjectDisposer.Add(lResult);
finally
__lObjectDisposer.Free();

Binary file not shown.

Binary file not shown.

View File

@ -110,8 +110,6 @@ uses
uBizAgentesServer in '..\Modulos\Contactos\Model\uBizAgentesServer.pas',
srvPedidosCliente_Impl in '..\Modulos\Pedidos de cliente\Servidor\srvPedidosCliente_Impl.pas' {srvPedidosCliente: TDataAbstractService},
uBizPedidosClienteServer in '..\Modulos\Pedidos de cliente\Model\uBizPedidosClienteServer.pas',
schPedidosClienteClient_Intf in '..\Modulos\Pedidos de cliente\Model\schPedidosClienteClient_Intf.pas',
schPedidosClienteServer_Intf in '..\Modulos\Pedidos de cliente\Model\schPedidosClienteServer_Intf.pas',
schArticulosClient_Intf in '..\Modulos\Articulos\Model\schArticulosClient_Intf.pas',
schArticulosServer_Intf in '..\Modulos\Articulos\Model\schArticulosServer_Intf.pas',
schRecibosClienteClient_Intf in '..\Modulos\Recibos de cliente\Model\schRecibosClienteClient_Intf.pas',
@ -123,8 +121,6 @@ uses
schRecibosProveedorClient_Intf in '..\Modulos\Recibos de proveedor\Model\schRecibosProveedorClient_Intf.pas',
schRecibosProveedorServer_Intf in '..\Modulos\Recibos de proveedor\Model\schRecibosProveedorServer_Intf.pas',
uRptRemesasProveedor_Server in '..\Modulos\Remesas de proveedor\Reports\uRptRemesasProveedor_Server.pas' {RptRemesasProveedor: TDataModule},
schPedidosProveedorClient_Intf in '..\Modulos\Pedidos a proveedor\Model\schPedidosProveedorClient_Intf.pas',
schPedidosProveedorServer_Intf in '..\Modulos\Pedidos a proveedor\Model\schPedidosProveedorServer_Intf.pas',
schFacturasClienteClient_Intf in '..\Modulos\Facturas de cliente\Model\schFacturasClienteClient_Intf.pas',
schFacturasClienteServer_Intf in '..\Modulos\Facturas de cliente\Model\schFacturasClienteServer_Intf.pas',
srvImpresiones_Impl in '..\Modulos\Impresiones\Servidor\srvImpresiones_Impl.pas' {srvImpresiones: TDARemoteService},
@ -163,7 +159,11 @@ uses
schInfVentasArticuloClient_Intf in '..\Modulos\Informe ventas por articulo\Model\schInfVentasArticuloClient_Intf.pas',
schInfVentasArticuloServer_Intf in '..\Modulos\Informe ventas por articulo\Model\schInfVentasArticuloServer_Intf.pas',
schAlbaranesProveedorClient_Intf in '..\Modulos\Albaranes de proveedor\Model\schAlbaranesProveedorClient_Intf.pas',
schAlbaranesProveedorServer_Intf in '..\Modulos\Albaranes de proveedor\Model\schAlbaranesProveedorServer_Intf.pas';
schAlbaranesProveedorServer_Intf in '..\Modulos\Albaranes de proveedor\Model\schAlbaranesProveedorServer_Intf.pas',
schPedidosClienteClient_Intf in '..\Modulos\Pedidos de cliente\Model\schPedidosClienteClient_Intf.pas',
schPedidosClienteServer_Intf in '..\Modulos\Pedidos de cliente\Model\schPedidosClienteServer_Intf.pas',
schPedidosProveedorClient_Intf in '..\Modulos\Pedidos a proveedor\Model\schPedidosProveedorClient_Intf.pas',
schPedidosProveedorServer_Intf in '..\Modulos\Pedidos a proveedor\Model\schPedidosProveedorServer_Intf.pas';
{$R *.res}
{$R ..\Servicios\RODLFile.res}

View File

@ -1,405 +1,407 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{ebdcd25d-40d7-4146-91ec-a0ea4aa1dcd1}</ProjectGuid>
<MainSource>FactuGES_Server.dpr</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>..\..\Output\Debug\Servidor\FactuGES_Server.exe</DCC_DependencyCheckOutputName>
<DCC_UsePackage>vcl;rtl;vclx;vclactnband;dbrtl;vcldb;vcldbx;bdertl;dsnap;dsnapcon;teeUI;teedb;tee;adortl;vclib;ibxpress;dbxcds;dbexpress;DbxCommonDriver;IndyCore;IndySystem;IndyProtocols;VclSmp;vclie;webdsnap;xmlrtl;inet;inetdbbde;inetdbxpress;RemObjects_BPDX_D11;RemObjects_RODX_D11;RemObjects_Indy_D11;RemObjects_Synapse_D11;RemObjects_WebBroker_D11;DataAbstract_Core_D11;DataAbstract_DBXDriver_D11;DataAbstract_IDE_D11;DataAbstract_Scripting_D11;DataAbstract_SDACDriver_D11;sdac105;dac105;DataAbstract_SQLiteDriver_D11;cxEditorsD10;cxLibraryD10;dxThemeD10;cxDataD10;cxExtEditorsD10;cxGridD10;cxPageControlD10;cxSchedulerD10;cxTreeListD10;cxVerticalGridD10;dxBarD10;dxComnD10;dxBarDBNavD10;dxBarExtDBItemsD10;dxBarExtItemsD10;dxDockingD10;dxLayoutControlD10;dxNavBarD10;dxPSCoreD10;dxsbD10;dxPScxCommonD10;dxPSLnksD10;vclshlctrls;dxPScxExtCommonD10;dxPScxGridLnkD10;dxPScxPCProdD10;dxPScxScheduler2LnkD10;dxPScxTLLnkD10;dxPSdxLCLnkD10;dxPsPrVwAdvD10;pckMD5;pckUCDataConnector;pckUserControl_RT;PluginSDK_D10R;PNG_D10;PngComponentsD10;tb2k_d10;tbx_d10;JclVcl;Jcl;JvXPCtrlsD11R;JvCoreD11R;JvSystemD11R;JvStdCtrlsD11R;JvAppFrmD11R;JvBandsD11R;JvDBD11R;JvDlgsD11R;JvBDED11R;JvCmpD11R;JvCryptD11R;JvCtrlsD11R;JvCustomD11R;JvDockingD11R;JvDotNetCtrlsD11R;JvEDID11R;JvGlobusD11R;JvHMID11R;JvInterpreterD11R;JvJansD11R;JvManagedThreadsD11R;JvMMD11R;JvNetD11R;JvPageCompsD11R;JvPluginD11R;JvPrintPreviewD11R;JvRuntimeDesignD11R;JvTimeFrameworkD11R;JvUIBD11R;JvValidatorsD11R;JvWizardD11R;pckUCADOConn;pckUCBDEConn;pckUCIBXConn;pckUCMidasConn;cxIntlPrintSys3D10;cxExportD10;cxIntl5D10;GUISDK_D11R;ccpackD11;JSDialog100;fsTee11;fs11;frx11;frxADO11;frxBDE11;frxDB11;frxDBX11;frxe11;frxIBX11;frxTee11;fsADO11;fsBDE11;fsDB11;fsIBX11;websnap;soaprtl;IntrawebDB_90_100;Intraweb_90_100</DCC_UsePackage>
</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_MapFile>3</DCC_MapFile>
<DCC_ExeOutput>..\..\Output\Release\Servidor</DCC_ExeOutput>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_MapFile>3</DCC_MapFile>
<DCC_ExeOutput>..\..\Output\Debug\Servidor</DCC_ExeOutput>
<DCC_Define>DEBUG;</DCC_Define>
<DCC_GenerateStackFrames>True</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>True</DCC_DebugInfoInExe>
<DCC_DebugVN>True</DCC_DebugVN>
<DCC_UnitSearchPath>C:\jcl\lib\d11\debug;C:\JCL\lib\d11\debug;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10</DCC_UnitSearchPath>
<DCC_ResourcePath>C:\jcl\lib\d11\debug;C:\JCL\lib\d11\debug;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10</DCC_ResourcePath>
<DCC_ObjPath>C:\jcl\lib\d11\debug;C:\JCL\lib\d11\debug;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10</DCC_ObjPath>
<DCC_IncludePath>C:\jcl\lib\d11\debug;C:\JCL\lib\d11\debug;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10</DCC_IncludePath>
</PropertyGroup>
<ProjectExtensions>
<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 Name="RunParams">/standalone</Parameters></Parameters><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">4</VersionInfo><VersionInfo Name="MinorVer">2</VersionInfo><VersionInfo Name="Release">9</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">4.2.9.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">4.2.9.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys><VersionInfoKeys Name="CompileDate">miércoles, 13 de febrero de 2013 12:02</VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<Excluded_Packages Name="C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\dxPSCoreD11.bpl">ExpressPrinting System by Developer Express Inc.</Excluded_Packages>
</Excluded_Packages><Source><Source Name="MainSource">FactuGES_Server.dpr</Source></Source></Delphi.Personality><ModelSupport>False</ModelSupport></BorlandProject></BorlandProject>
</ProjectExtensions>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
<ItemGroup>
<DelphiCompile Include="FactuGES_Server.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\ApplicationBase\Empresas\Model\schEmpresasClient_Intf.pas" />
<DCCReference Include="..\ApplicationBase\Empresas\Model\schEmpresasServer_Intf.pas" />
<DCCReference Include="..\ApplicationBase\Empresas\Model\uBizEmpresasServer.pas" />
<DCCReference Include="..\ApplicationBase\Empresas\Servidor\srvEmpresas_Impl.pas">
<Form>srvEmpresas</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\ApplicationBase\ProvinciasPoblaciones\Servidor\srvProvinciasPoblaciones_Impl.pas">
<Form>srvProvinciasPoblaciones_Impl</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\ApplicationBase\Usuarios\Model\schUsuariosClient_Intf.pas" />
<DCCReference Include="..\ApplicationBase\Usuarios\Model\schUsuariosServer_Intf.pas" />
<DCCReference Include="..\ApplicationBase\Usuarios\Servidor\srvUsuarios_Impl.pas">
<Form>srvUsuarios</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Base\schBase_Intf.pas" />
<DCCReference Include="..\Base\Utiles\uSistemaFunc.pas" />
<DCCReference Include="..\Base\Utiles\uStringsUtils.pas" />
<DCCReference Include="..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteClient_Intf.pas" />
<DCCReference Include="..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteServer_Intf.pas" />
<DCCReference Include="..\Modulos\Albaranes de cliente\Model\uBizAlbaranClienteServer.pas" />
<DCCReference Include="..\Modulos\Albaranes de cliente\Reports\uRptAlbaranesCliente_Server.pas">
<Form>RptAlbaranesCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Albaranes de cliente\Servidor\srvAlbaranesCliente_Impl.pas">
<Form>srvAlbaranesCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Albaranes de proveedor\Model\schAlbaranesProveedorClient_Intf.pas" />
<DCCReference Include="..\Modulos\Albaranes de proveedor\Model\schAlbaranesProveedorServer_Intf.pas" />
<DCCReference Include="..\Modulos\Albaranes de proveedor\Model\uBizAlbaranProveedorServer.PAS" />
<DCCReference Include="..\Modulos\Albaranes de proveedor\Reports\uRptAlbaranesProveedor_Server.pas">
<Form>RptAlbaranesProveedor</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Albaranes de proveedor\Servidor\srvAlbaranesProveedor_Impl.pas">
<Form>srvAlbaranesProveedor</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Almacenes\Model\schAlmacenesClient_Intf.pas" />
<DCCReference Include="..\Modulos\Almacenes\Model\schAlmacenesServer_Intf.pas" />
<DCCReference Include="..\Modulos\Almacenes\Servidor\srvAlmacenes_Impl.pas">
<Form>srvAlmacenes</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Articulos\Model\schArticulosClient_Intf.pas" />
<DCCReference Include="..\Modulos\Articulos\Model\schArticulosServer_Intf.pas" />
<DCCReference Include="..\Modulos\Articulos\Model\uBizArticulosServer.pas" />
<DCCReference Include="..\Modulos\Articulos\Servidor\srvArticulos_Impl.pas">
<Form>srvArticulos</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Comisiones\Model\schComisionesClient_Intf.pas" />
<DCCReference Include="..\Modulos\Comisiones\Model\schComisionesServer_Intf.pas" />
<DCCReference Include="..\Modulos\Comisiones\Model\uBizComisionesServer.pas" />
<DCCReference Include="..\Modulos\Comisiones\Reports\uRptComisiones_Server.pas">
<Form>RptComisiones</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Comisiones\Servidor\srvComisiones_Impl.pas">
<Form>srvComisiones</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Contactos\Model\schContactosClient_Intf.pas" />
<DCCReference Include="..\Modulos\Contactos\Model\schContactosServer_Intf.pas" />
<DCCReference Include="..\Modulos\Contactos\Model\uBizAgentesServer.pas" />
<DCCReference Include="..\Modulos\Contactos\Model\uBizClientesServer.pas" />
<DCCReference Include="..\Modulos\Contactos\Model\uBizContactosServer.pas" />
<DCCReference Include="..\Modulos\Contactos\Model\uBizEmpleadosServer.pas" />
<DCCReference Include="..\Modulos\Contactos\Model\uBizProveedoresServer.pas" />
<DCCReference Include="..\Modulos\Contactos\Reports\uRptEtiquetasContacto_Server.pas">
<Form>RptEtiquetasContacto</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Contactos\Reports\uRptFichasEmpleado_Server.pas">
<Form>RptFichasEmpleado</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Contactos\Servidor\srvContactos_Impl.pas">
<Form>srvContactos</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Fabricantes\Model\schFabricantesClient_Intf.pas" />
<DCCReference Include="..\Modulos\Fabricantes\Model\schFabricantesServer_Intf.pas" />
<DCCReference Include="..\Modulos\Fabricantes\Servidor\srvFabricantes_Impl.pas">
<Form>srvFabricantes</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Facturas de cliente\Model\schFacturasClienteClient_Intf.pas" />
<DCCReference Include="..\Modulos\Facturas de cliente\Model\schFacturasClienteServer_Intf.pas" />
<DCCReference Include="..\Modulos\Facturas de cliente\Model\uBizFacturasClienteServer.pas" />
<DCCReference Include="..\Modulos\Facturas de cliente\Reports\uRptFacturasCliente_Server.pas">
<Form>RptFacturasCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Facturas de cliente\Servidor\srvFacturasCliente_Impl.pas">
<Form>srvFacturasCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Facturas de proveedor\Model\schFacturasProveedorClient_Intf.pas" />
<DCCReference Include="..\Modulos\Facturas de proveedor\Model\schFacturasProveedorServer_Intf.pas" />
<DCCReference Include="..\Modulos\Facturas de proveedor\Model\uBizFacturasProveedorServer.pas" />
<DCCReference Include="..\Modulos\Facturas de proveedor\Reports\uRptFacturasProveedor_Server.pas">
<Form>RptFacturasProveedor</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Facturas de proveedor\Servidor\srvFacturasProveedor_Impl.pas">
<Form>srvFacturasProveedor</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Familias\Model\schFamiliasClient_Intf.pas" />
<DCCReference Include="..\Modulos\Familias\Model\schFamiliasServer_Intf.pas" />
<DCCReference Include="..\Modulos\Familias\Servidor\srvFamilias_Impl.pas">
<Form>srvFamilias</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Formas de pago\Model\schFormasPagoClient_Intf.pas" />
<DCCReference Include="..\Modulos\Formas de pago\Model\schFormasPagoServer_Intf.pas" />
<DCCReference Include="..\Modulos\Formas de pago\Servidor\srvFormasPago_Impl.pas">
<Form>srvFormasPago</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Gestion de documentos\Servidor\srvGestorDocumentos_Impl.pas">
<Form>srvGestorDocumentos</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Gestor de informes\Servidor\srvGestorInformes_Impl.pas">
<Form>srvGestorInformes</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Historico de movimientos\Model\schHistoricoMovimientosClient_Intf.pas" />
<DCCReference Include="..\Modulos\Historico de movimientos\Model\schHistoricoMovimientosServer_Intf.pas" />
<DCCReference Include="..\Modulos\Historico de movimientos\Servidor\srvHistoricoMovimientos_Impl.pas">
<Form>srvHistoricoMovimientos</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Impresiones\Model\schImpresionesClient_Intf.pas" />
<DCCReference Include="..\Modulos\Impresiones\Model\schImpresionesServer_Intf.pas" />
<DCCReference Include="..\Modulos\Impresiones\Servidor\srvImpresiones_Impl.pas">
<Form>srvImpresiones</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Informe margen por articulo\Servidor\srvInfMargenArticulo_Impl.pas">
<Form>srvInfMargenArticulo</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Informe ventas por articulo\Model\schInfVentasArticuloClient_Intf.pas" />
<DCCReference Include="..\Modulos\Informe ventas por articulo\Model\schInfVentasArticuloServer_Intf.pas" />
<DCCReference Include="..\Modulos\Informe ventas por articulo\Servidor\srvInfVentasArticulo_Impl.pas">
<Form>srvInfVentasArticulo</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Informes base\Model\schInformesClient_Intf.pas" />
<DCCReference Include="..\Modulos\Informes base\Model\schInformesServer_Intf.pas" />
<DCCReference Include="..\Modulos\Informes base\Servidor\srvInformes_Impl.pas">
<Form>srvInformes</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Inventario\Model\schInventarioClient_Intf.pas" />
<DCCReference Include="..\Modulos\Inventario\Model\schInventarioServer_Intf.pas" />
<DCCReference Include="..\Modulos\Inventario\Servidor\srvInventario_Impl.pas">
<Form>srvInventario</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Obras\Model\schObrasClient_Intf.pas" />
<DCCReference Include="..\Modulos\Obras\Model\schObrasServer_Intf.pas" />
<DCCReference Include="..\Modulos\Obras\Model\uBizObrasServer.pas" />
<DCCReference Include="..\Modulos\Obras\Servidor\srvObras_Impl.pas">
<Form>srvObras</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Pedidos a proveedor\Model\schPedidosProveedorClient_Intf.pas" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\Model\schPedidosProveedorServer_Intf.pas" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\Model\uBizPedidosProveedorServer.pas" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\Reports\uRptPedidosProveedor_Server.pas">
<Form>RptPedidosProveedor</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Pedidos a proveedor\Servidor\srvPedidosProveedor_Impl.pas">
<Form>srvPedidosProveedor</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Pedidos de cliente\Model\schPedidosClienteClient_Intf.pas" />
<DCCReference Include="..\Modulos\Pedidos de cliente\Model\schPedidosClienteServer_Intf.pas" />
<DCCReference Include="..\Modulos\Pedidos de cliente\Model\uBizPedidosClienteServer.pas" />
<DCCReference Include="..\Modulos\Pedidos de cliente\Reports\uRptPedidosCliente_Server.pas">
<Form>RptPedidosCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Pedidos de cliente\Servidor\srvPedidosCliente_Impl.pas">
<Form>srvPedidosCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Presupuestos de cliente\Model\schPresupuestosClienteClient_Intf.pas" />
<DCCReference Include="..\Modulos\Presupuestos de cliente\Model\schPresupuestosClienteServer_Intf.pas" />
<DCCReference Include="..\Modulos\Presupuestos de cliente\Model\uBizPresupuestosClienteServer.pas" />
<DCCReference Include="..\Modulos\Presupuestos de cliente\Reports\uRptPresupuestosCliente_Server.pas">
<Form>RptPresupuestosCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Presupuestos de cliente\Servidor\srvPresupuestosCliente_Impl.pas">
<Form>srvPresupuestosCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Recibos de cliente\Model\schRecibosClienteClient_Intf.pas" />
<DCCReference Include="..\Modulos\Recibos de cliente\Model\schRecibosClienteServer_Intf.pas" />
<DCCReference Include="..\Modulos\Recibos de cliente\Reports\uRptRecibosCliente_Server.pas">
<Form>RptRecibosCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Recibos de cliente\Servidor\srvRecibosCliente_Impl.pas">
<Form>srvRecibosCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Recibos de proveedor\Model\schRecibosProveedorClient_Intf.pas" />
<DCCReference Include="..\Modulos\Recibos de proveedor\Model\schRecibosProveedorServer_Intf.pas" />
<DCCReference Include="..\Modulos\Recibos de proveedor\Reports\uRptRecibosProveedor_Server.pas">
<Form>RptRecibosProveedor</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Recibos de proveedor\Servidor\srvRecibosProveedor_Impl.pas">
<Form>srvRecibosProveedor</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Referencias\Model\schReferenciasClient_Intf.pas" />
<DCCReference Include="..\Modulos\Referencias\Model\schReferenciasServer_Intf.pas" />
<DCCReference Include="..\Modulos\Referencias\Servidor\srvReferencias_Impl.pas">
<Form>srvReferencias</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Registro de correos\Servidor\srvRegistroCorreos_Impl.pas">
<Form>srvRegistroCorreos</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Remesas de cliente\Model\schRemesasClienteClient_Intf.pas" />
<DCCReference Include="..\Modulos\Remesas de cliente\Model\schRemesasClienteServer_Intf.pas" />
<DCCReference Include="..\Modulos\Remesas de cliente\Model\uBizRemesasClienteServer.pas" />
<DCCReference Include="..\Modulos\Remesas de cliente\Reports\uRptRemesasCliente_Server.pas">
<Form>RptRemesasCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Remesas de cliente\Servidor\srvRemesasCliente_Impl.pas">
<Form>srvRemesasCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Remesas de proveedor\Model\schRemesasProveedorClient_Intf.pas" />
<DCCReference Include="..\Modulos\Remesas de proveedor\Model\schRemesasProveedorServer_Intf.pas" />
<DCCReference Include="..\Modulos\Remesas de proveedor\Model\uBizRemesasProveedorServer.pas" />
<DCCReference Include="..\Modulos\Remesas de proveedor\Reports\uRptRemesasProveedor_Server.pas">
<Form>RptRemesasProveedor</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Remesas de proveedor\Servidor\srvRemesasProveedor_Impl.pas">
<Form>srvRemesasProveedor</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Tienda web\Model\schTiendaWebClient_Intf.pas" />
<DCCReference Include="..\Modulos\Tienda web\Model\schTiendaWebServer_Intf.pas" />
<DCCReference Include="..\Modulos\Tienda web\Model\uBizOscAddressBookServer.pas" />
<DCCReference Include="..\Modulos\Tienda web\Model\uBizOscCustomerServer.pas" />
<DCCReference Include="..\Modulos\Tienda web\Model\uBizOscManufacturerServer.pas" />
<DCCReference Include="..\Modulos\Tienda web\Model\uBizOscOrderServer.pas" />
<DCCReference Include="..\Modulos\Tienda web\Model\uBizOscProductServer.pas" />
<DCCReference Include="..\Modulos\Tienda web\Model\uBizTiendaWebServer.pas" />
<DCCReference Include="..\Modulos\Tienda web\Servidor\srvTiendaWeb_Impl.pas">
<Form>srvTiendaWeb</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Tipos de IVA\Model\schTiposIVAClient_Intf.pas" />
<DCCReference Include="..\Modulos\Tipos de IVA\Model\schTiposIVAServer_Intf.pas" />
<DCCReference Include="..\Modulos\Tipos de IVA\Servidor\srvTiposIVA_Impl.pas">
<Form>srvTiposIVA</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Unidades de medida\Model\schUnidadesMedidaClient_Intf.pas" />
<DCCReference Include="..\Modulos\Unidades de medida\Model\schUnidadesMedidaServer_Intf.pas" />
<DCCReference Include="..\Modulos\Unidades de medida\Servidor\srvUnidadesMedida_Impl.pas">
<Form>srvUnidadesMedida</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Servicios\FactuGES_Intf.pas" />
<DCCReference Include="..\Servicios\FactuGES_Invk.pas" />
<DCCReference Include="Configuracion\srvConfiguracion_Impl.pas">
<Form>srvConfiguracion</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\uConexionBD.pas">
<Form>frConexionBD</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\uConexionOSC.pas">
<Form>frConexionOSC</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\uConfGeneral.pas">
<Form>frConfGeneral</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\uConfiguracion.pas">
<Form>fConfiguracion</Form>
<DesignClass>TForm</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\uFrameConfiguracion.pas">
<Form>FrameConfiguracion</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
<DCCReference Include="srvLogin_Impl.pas">
<Form>srvLogin</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="uAcercaDe.pas">
<Form>fAcercaDe</Form>
</DCCReference>
<DCCReference Include="uDataModuleServer.pas">
<Form>dmServer</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="uServerMainForm.pas">
<Form>fServerForm</Form>
</DCCReference>
<DCCReference Include="Utiles\AHWord97.pas" />
<DCCReference Include="Utiles\MidasSpeedFix.pas" />
<DCCReference Include="Utiles\uBusinessUtils.pas" />
<DCCReference Include="Utiles\uDatabaseUtils.pas" />
<DCCReference Include="Utiles\uReferenciasUtils.pas" />
<DCCReference Include="Utiles\uRestriccionesUsuarioUtils.pas" />
<DCCReference Include="Utiles\uSchemaUtilsServer.pas" />
<DCCReference Include="Utiles\uServerAppUtils.pas" />
<DCCReference Include="Utiles\uSesionesUtils.pas" />
<DCCReference Include="Utiles\uTiendaWebUtils.pas" />
</ItemGroup>
<PropertyGroup>
<ProjectGuid>{ebdcd25d-40d7-4146-91ec-a0ea4aa1dcd1}</ProjectGuid>
<MainSource>FactuGES_Server.dpr</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>..\..\Output\Debug\Servidor\FactuGES_Server.exe</DCC_DependencyCheckOutputName>
<DCC_UsePackage>vcl;rtl;vclx;vclactnband;dbrtl;vcldb;vcldbx;bdertl;dsnap;dsnapcon;teeUI;teedb;tee;adortl;vclib;ibxpress;dbxcds;dbexpress;DbxCommonDriver;IndyCore;IndySystem;IndyProtocols;VclSmp;vclie;webdsnap;xmlrtl;inet;inetdbbde;inetdbxpress;RemObjects_BPDX_D11;RemObjects_RODX_D11;RemObjects_Indy_D11;RemObjects_Synapse_D11;RemObjects_WebBroker_D11;DataAbstract_Core_D11;DataAbstract_DBXDriver_D11;DataAbstract_IDE_D11;DataAbstract_Scripting_D11;DataAbstract_SDACDriver_D11;sdac105;dac105;DataAbstract_SQLiteDriver_D11;cxEditorsD10;cxLibraryD10;dxThemeD10;cxDataD10;cxExtEditorsD10;cxGridD10;cxPageControlD10;cxSchedulerD10;cxTreeListD10;cxVerticalGridD10;dxBarD10;dxComnD10;dxBarDBNavD10;dxBarExtDBItemsD10;dxBarExtItemsD10;dxDockingD10;dxLayoutControlD10;dxNavBarD10;dxPSCoreD10;dxsbD10;dxPScxCommonD10;dxPSLnksD10;vclshlctrls;dxPScxExtCommonD10;dxPScxGridLnkD10;dxPScxPCProdD10;dxPScxScheduler2LnkD10;dxPScxTLLnkD10;dxPSdxLCLnkD10;dxPsPrVwAdvD10;pckMD5;pckUCDataConnector;pckUserControl_RT;PluginSDK_D10R;PNG_D10;PngComponentsD10;tb2k_d10;tbx_d10;JclVcl;Jcl;JvXPCtrlsD11R;JvCoreD11R;JvSystemD11R;JvStdCtrlsD11R;JvAppFrmD11R;JvBandsD11R;JvDBD11R;JvDlgsD11R;JvBDED11R;JvCmpD11R;JvCryptD11R;JvCtrlsD11R;JvCustomD11R;JvDockingD11R;JvDotNetCtrlsD11R;JvEDID11R;JvGlobusD11R;JvHMID11R;JvInterpreterD11R;JvJansD11R;JvManagedThreadsD11R;JvMMD11R;JvNetD11R;JvPageCompsD11R;JvPluginD11R;JvPrintPreviewD11R;JvRuntimeDesignD11R;JvTimeFrameworkD11R;JvUIBD11R;JvValidatorsD11R;JvWizardD11R;pckUCADOConn;pckUCBDEConn;pckUCIBXConn;pckUCMidasConn;cxIntlPrintSys3D10;cxExportD10;cxIntl5D10;GUISDK_D11R;ccpackD11;JSDialog100;fsTee11;fs11;frx11;frxADO11;frxBDE11;frxDB11;frxDBX11;frxe11;frxIBX11;frxTee11;fsADO11;fsBDE11;fsDB11;fsIBX11;websnap;soaprtl;IntrawebDB_90_100;Intraweb_90_100</DCC_UsePackage>
</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_MapFile>3</DCC_MapFile>
<DCC_ExeOutput>..\..\Output\Release\Servidor</DCC_ExeOutput>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_MapFile>3</DCC_MapFile>
<DCC_ExeOutput>..\..\Output\Debug\Servidor</DCC_ExeOutput>
<DCC_Define>DEBUG;</DCC_Define>
<DCC_GenerateStackFrames>True</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>True</DCC_DebugInfoInExe>
<DCC_DebugVN>True</DCC_DebugVN>
<DCC_UnitSearchPath>C:\jcl\lib\d11\debug;C:\JCL\lib\d11\debug;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10</DCC_UnitSearchPath>
<DCC_ResourcePath>C:\jcl\lib\d11\debug;C:\JCL\lib\d11\debug;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10</DCC_ResourcePath>
<DCC_ObjPath>C:\jcl\lib\d11\debug;C:\JCL\lib\d11\debug;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10</DCC_ObjPath>
<DCC_IncludePath>C:\jcl\lib\d11\debug;C:\JCL\lib\d11\debug;$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10</DCC_IncludePath>
</PropertyGroup>
<ProjectExtensions>
<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 Name="RunParams">/standalone</Parameters></Parameters><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">4</VersionInfo><VersionInfo Name="MinorVer">3</VersionInfo><VersionInfo Name="Release">1</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">4.3.1.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">4.3.1.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys><VersionInfoKeys Name="CompileDate">martes, 25 de junio de 2013 13:34</VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<Excluded_Packages Name="C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\dxPSCoreD11.bpl">ExpressPrinting System by Developer Express Inc.</Excluded_Packages>
</Excluded_Packages><Source><Source Name="MainSource">FactuGES_Server.dpr</Source></Source></Delphi.Personality><ModelSupport>False</ModelSupport></BorlandProject></BorlandProject>
</ProjectExtensions>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets"/>
<ItemGroup>
<DelphiCompile Include="FactuGES_Server.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\ApplicationBase\Empresas\Model\schEmpresasClient_Intf.pas"/>
<DCCReference Include="..\ApplicationBase\Empresas\Model\schEmpresasServer_Intf.pas"/>
<DCCReference Include="..\ApplicationBase\Empresas\Model\uBizEmpresasServer.pas"/>
<DCCReference Include="..\ApplicationBase\Empresas\Servidor\srvEmpresas_Impl.pas">
<Form>srvEmpresas</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\ApplicationBase\ProvinciasPoblaciones\Servidor\srvProvinciasPoblaciones_Impl.pas">
<Form>srvProvinciasPoblaciones_Impl</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\ApplicationBase\Usuarios\Model\schUsuariosClient_Intf.pas"/>
<DCCReference Include="..\ApplicationBase\Usuarios\Model\schUsuariosServer_Intf.pas"/>
<DCCReference Include="..\ApplicationBase\Usuarios\Servidor\srvUsuarios_Impl.pas">
<Form>srvUsuarios</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Base\schBase_Intf.pas"/>
<DCCReference Include="..\Base\Utiles\uSistemaFunc.pas"/>
<DCCReference Include="..\Base\Utiles\uStringsUtils.pas"/>
<DCCReference Include="..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Albaranes de cliente\Model\uBizAlbaranClienteServer.pas"/>
<DCCReference Include="..\Modulos\Albaranes de cliente\Reports\uRptAlbaranesCliente_Server.pas">
<Form>RptAlbaranesCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Albaranes de cliente\Reports\uRptWordAlbaranCliente.pas">
<DesignClass>TDataModule</DesignClass>
<Form>RptWordAlbaranCliente</Form>
</DCCReference>
<DCCReference Include="..\Modulos\Albaranes de cliente\Servidor\srvAlbaranesCliente_Impl.pas">
<Form>srvAlbaranesCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Albaranes de proveedor\Model\schAlbaranesProveedorClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Albaranes de proveedor\Model\schAlbaranesProveedorServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Albaranes de proveedor\Model\uBizAlbaranProveedorServer.PAS"/>
<DCCReference Include="..\Modulos\Albaranes de proveedor\Reports\uRptAlbaranesProveedor_Server.pas">
<Form>RptAlbaranesProveedor</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Albaranes de proveedor\Reports\uRptWordAlbaranProveedor.pas">
<DesignClass>TDataModule</DesignClass>
<Form>RptWordAlbaranProveedor</Form>
</DCCReference>
<DCCReference Include="..\Modulos\Albaranes de proveedor\Servidor\srvAlbaranesProveedor_Impl.pas">
<Form>srvAlbaranesProveedor</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Almacenes\Model\schAlmacenesClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Almacenes\Model\schAlmacenesServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Almacenes\Servidor\srvAlmacenes_Impl.pas">
<Form>srvAlmacenes</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Articulos\Model\schArticulosClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Articulos\Model\schArticulosServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Articulos\Model\uBizArticulosServer.pas"/>
<DCCReference Include="..\Modulos\Articulos\Servidor\srvArticulos_Impl.pas">
<Form>srvArticulos</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Comisiones\Model\schComisionesClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Comisiones\Model\schComisionesServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Comisiones\Model\uBizComisionesServer.pas"/>
<DCCReference Include="..\Modulos\Comisiones\Reports\uRptComisiones_Server.pas">
<Form>RptComisiones</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Comisiones\Servidor\srvComisiones_Impl.pas">
<Form>srvComisiones</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Contactos\Model\schContactosClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Contactos\Model\schContactosServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Contactos\Model\uBizAgentesServer.pas"/>
<DCCReference Include="..\Modulos\Contactos\Model\uBizClientesServer.pas"/>
<DCCReference Include="..\Modulos\Contactos\Model\uBizContactosServer.pas"/>
<DCCReference Include="..\Modulos\Contactos\Model\uBizEmpleadosServer.pas"/>
<DCCReference Include="..\Modulos\Contactos\Model\uBizProveedoresServer.pas"/>
<DCCReference Include="..\Modulos\Contactos\Reports\uRptEtiquetasContacto_Server.pas">
<Form>RptEtiquetasContacto</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Contactos\Reports\uRptFichasEmpleado_Server.pas">
<Form>RptFichasEmpleado</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Contactos\Servidor\srvContactos_Impl.pas">
<Form>srvContactos</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Fabricantes\Model\schFabricantesClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Fabricantes\Model\schFabricantesServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Fabricantes\Servidor\srvFabricantes_Impl.pas">
<Form>srvFabricantes</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Facturas de cliente\Model\schFacturasClienteClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Facturas de cliente\Model\schFacturasClienteServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Facturas de cliente\Model\uBizFacturasClienteServer.pas"/>
<DCCReference Include="..\Modulos\Facturas de cliente\Reports\uRptFacturasCliente_Server.pas">
<Form>RptFacturasCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Facturas de cliente\Reports\uRptWordFacturaCliente.pas">
<DesignClass>TDataModule</DesignClass>
<Form>RptWordFacturaCliente</Form>
</DCCReference>
<DCCReference Include="..\Modulos\Facturas de cliente\Servidor\srvFacturasCliente_Impl.pas">
<Form>srvFacturasCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Facturas de proveedor\Model\schFacturasProveedorClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Facturas de proveedor\Model\schFacturasProveedorServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Facturas de proveedor\Model\uBizFacturasProveedorServer.pas"/>
<DCCReference Include="..\Modulos\Facturas de proveedor\Reports\uRptFacturasProveedor_Server.pas">
<Form>RptFacturasProveedor</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Facturas de proveedor\Servidor\srvFacturasProveedor_Impl.pas">
<Form>srvFacturasProveedor</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Familias\Model\schFamiliasClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Familias\Model\schFamiliasServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Familias\Servidor\srvFamilias_Impl.pas">
<Form>srvFamilias</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Formas de pago\Model\schFormasPagoClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Formas de pago\Model\schFormasPagoServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Formas de pago\Servidor\srvFormasPago_Impl.pas">
<Form>srvFormasPago</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Gestion de documentos\Servidor\srvGestorDocumentos_Impl.pas">
<Form>srvGestorDocumentos</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Gestor de informes\Servidor\srvGestorInformes_Impl.pas">
<Form>srvGestorInformes</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Historico de movimientos\Model\schHistoricoMovimientosClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Historico de movimientos\Model\schHistoricoMovimientosServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Historico de movimientos\Servidor\srvHistoricoMovimientos_Impl.pas">
<Form>srvHistoricoMovimientos</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Impresiones\Model\schImpresionesClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Impresiones\Model\schImpresionesServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Impresiones\Servidor\srvImpresiones_Impl.pas">
<Form>srvImpresiones</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Informe margen por articulo\Servidor\srvInfMargenArticulo_Impl.pas">
<Form>srvInfMargenArticulo</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Informe ventas por articulo\Model\schInfVentasArticuloClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Informe ventas por articulo\Model\schInfVentasArticuloServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Informe ventas por articulo\Servidor\srvInfVentasArticulo_Impl.pas">
<Form>srvInfVentasArticulo</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Informes base\Model\schInformesClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Informes base\Model\schInformesServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Informes base\Servidor\srvInformes_Impl.pas">
<Form>srvInformes</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Inventario\Model\schInventarioClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Inventario\Model\schInventarioServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Inventario\Servidor\srvInventario_Impl.pas">
<Form>srvInventario</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Obras\Model\schObrasClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Obras\Model\schObrasServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Obras\Model\uBizObrasServer.pas"/>
<DCCReference Include="..\Modulos\Obras\Servidor\srvObras_Impl.pas">
<Form>srvObras</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Pedidos a proveedor\Model\schPedidosProveedorClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Pedidos a proveedor\Model\schPedidosProveedorServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Pedidos a proveedor\Model\uBizPedidosProveedorServer.pas"/>
<DCCReference Include="..\Modulos\Pedidos a proveedor\Reports\uRptPedidosProveedor_Server.pas">
<Form>RptPedidosProveedor</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Pedidos a proveedor\Reports\uRptWordPedidoProveedor.pas">
<DesignClass>TDataModule</DesignClass>
<Form>RptWordPedidoProveedor</Form>
</DCCReference>
<DCCReference Include="..\Modulos\Pedidos a proveedor\Servidor\srvPedidosProveedor_Impl.pas">
<Form>srvPedidosProveedor</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Pedidos de cliente\Model\schPedidosClienteClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Pedidos de cliente\Model\schPedidosClienteServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Pedidos de cliente\Model\uBizPedidosClienteServer.pas"/>
<DCCReference Include="..\Modulos\Pedidos de cliente\Reports\uRptPedidosCliente_Server.pas">
<Form>RptPedidosCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Pedidos de cliente\Servidor\srvPedidosCliente_Impl.pas">
<Form>srvPedidosCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Presupuestos de cliente\Model\schPresupuestosClienteClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Presupuestos de cliente\Model\schPresupuestosClienteServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Presupuestos de cliente\Model\uBizPresupuestosClienteServer.pas"/>
<DCCReference Include="..\Modulos\Presupuestos de cliente\Reports\uRptPresupuestosCliente_Server.pas">
<Form>RptPresupuestosCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Presupuestos de cliente\Reports\uRptWordCertificadoTrabajo_Server.pas">
<DesignClass>TDataModule</DesignClass>
<Form>RptWordCertificadoTrabajo</Form>
</DCCReference>
<DCCReference Include="..\Modulos\Presupuestos de cliente\Reports\uRptWordPresupuestoCliente.pas">
<DesignClass>TDataModule</DesignClass>
<Form>RptWordPresupuestoCliente</Form>
</DCCReference>
<DCCReference Include="..\Modulos\Presupuestos de cliente\Servidor\srvPresupuestosCliente_Impl.pas">
<Form>srvPresupuestosCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Recibos de cliente\Model\schRecibosClienteClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Recibos de cliente\Model\schRecibosClienteServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Recibos de cliente\Reports\uRptRecibosCliente_Server.pas">
<Form>RptRecibosCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Recibos de cliente\Servidor\srvRecibosCliente_Impl.pas">
<Form>srvRecibosCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Recibos de proveedor\Model\schRecibosProveedorClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Recibos de proveedor\Model\schRecibosProveedorServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Recibos de proveedor\Reports\uRptRecibosProveedor_Server.pas">
<Form>RptRecibosProveedor</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Recibos de proveedor\Servidor\srvRecibosProveedor_Impl.pas">
<Form>srvRecibosProveedor</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Referencias\Model\schReferenciasClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Referencias\Model\schReferenciasServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Referencias\Servidor\srvReferencias_Impl.pas">
<Form>srvReferencias</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Registro de correos\Servidor\srvRegistroCorreos_Impl.pas">
<Form>srvRegistroCorreos</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Remesas de cliente\Model\schRemesasClienteClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Remesas de cliente\Model\schRemesasClienteServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Remesas de cliente\Model\uBizRemesasClienteServer.pas"/>
<DCCReference Include="..\Modulos\Remesas de cliente\Reports\uRptRemesasCliente_Server.pas">
<Form>RptRemesasCliente</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Remesas de cliente\Servidor\srvRemesasCliente_Impl.pas">
<Form>srvRemesasCliente</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Remesas de proveedor\Model\schRemesasProveedorClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Remesas de proveedor\Model\schRemesasProveedorServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Remesas de proveedor\Model\uBizRemesasProveedorServer.pas"/>
<DCCReference Include="..\Modulos\Remesas de proveedor\Reports\uRptRemesasProveedor_Server.pas">
<Form>RptRemesasProveedor</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Remesas de proveedor\Servidor\srvRemesasProveedor_Impl.pas">
<Form>srvRemesasProveedor</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Tienda web\Model\schTiendaWebClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Tienda web\Model\schTiendaWebServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Tienda web\Model\uBizOscAddressBookServer.pas"/>
<DCCReference Include="..\Modulos\Tienda web\Model\uBizOscCustomerServer.pas"/>
<DCCReference Include="..\Modulos\Tienda web\Model\uBizOscManufacturerServer.pas"/>
<DCCReference Include="..\Modulos\Tienda web\Model\uBizOscOrderServer.pas"/>
<DCCReference Include="..\Modulos\Tienda web\Model\uBizOscProductServer.pas"/>
<DCCReference Include="..\Modulos\Tienda web\Model\uBizTiendaWebServer.pas"/>
<DCCReference Include="..\Modulos\Tienda web\Servidor\srvTiendaWeb_Impl.pas">
<Form>srvTiendaWeb</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Tipos de IVA\Model\schTiposIVAClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Tipos de IVA\Model\schTiposIVAServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Tipos de IVA\Servidor\srvTiposIVA_Impl.pas">
<Form>srvTiposIVA</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Modulos\Unidades de medida\Model\schUnidadesMedidaClient_Intf.pas"/>
<DCCReference Include="..\Modulos\Unidades de medida\Model\schUnidadesMedidaServer_Intf.pas"/>
<DCCReference Include="..\Modulos\Unidades de medida\Servidor\srvUnidadesMedida_Impl.pas">
<Form>srvUnidadesMedida</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="..\Servicios\FactuGES_Intf.pas"/>
<DCCReference Include="..\Servicios\FactuGES_Invk.pas"/>
<DCCReference Include="Configuracion\srvConfiguracion_Impl.pas">
<Form>srvConfiguracion</Form>
<DesignClass>TDataAbstractService</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\uConexionBD.pas">
<Form>frConexionBD</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\uConexionOSC.pas">
<Form>frConexionOSC</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\uConfGeneral.pas">
<Form>frConfGeneral</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\uConfiguracion.pas">
<Form>fConfiguracion</Form>
<DesignClass>TForm</DesignClass>
</DCCReference>
<DCCReference Include="Configuracion\uFrameConfiguracion.pas">
<Form>FrameConfiguracion</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
<DCCReference Include="srvLogin_Impl.pas">
<Form>srvLogin</Form>
<DesignClass>TDARemoteService</DesignClass>
</DCCReference>
<DCCReference Include="uAcercaDe.pas">
<Form>fAcercaDe</Form>
</DCCReference>
<DCCReference Include="uDataModuleServer.pas">
<Form>dmServer</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="uServerMainForm.pas">
<Form>fServerForm</Form>
</DCCReference>
<DCCReference Include="Utiles\AHWord97.pas"/>
<DCCReference Include="Utiles\MidasSpeedFix.pas"/>
<DCCReference Include="Utiles\uBusinessUtils.pas"/>
<DCCReference Include="Utiles\uDatabaseUtils.pas"/>
<DCCReference Include="Utiles\uReferenciasUtils.pas"/>
<DCCReference Include="Utiles\uRestriccionesUsuarioUtils.pas"/>
<DCCReference Include="Utiles\uSchemaUtilsServer.pas"/>
<DCCReference Include="Utiles\uServerAppUtils.pas"/>
<DCCReference Include="Utiles\uSesionesUtils.pas"/>
<DCCReference Include="Utiles\uTiendaWebUtils.pas"/>
</ItemGroup>
</Project>
<!-- EurekaLog First Line
[Exception Log]

View File

@ -1,7 +1,7 @@
MAINICON ICON "C:\Codigo\Resources\Iconos\Servidor.ico"
1 VERSIONINFO
FILEVERSION 4,2,9,0
PRODUCTVERSION 4,2,9,0
FILEVERSION 4,3,1,0
PRODUCTVERSION 4,3,1,0
FILEFLAGSMASK 0x3FL
FILEFLAGS 0x00L
FILEOS 0x40004L
@ -12,9 +12,9 @@ BEGIN
BEGIN
BLOCK "0C0A04E4"
BEGIN
VALUE "FileVersion", "4.2.9.0\0"
VALUE "ProductVersion", "4.2.9.0\0"
VALUE "CompileDate", "lunes, 20 de mayo de 2013 13:25\0"
VALUE "FileVersion", "4.3.1.0\0"
VALUE "ProductVersion", "4.3.1.0\0"
VALUE "CompileDate", "martes, 25 de junio de 2013 18:41\0"
END
END
BLOCK "VarFileInfo"

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>