Ticket #110 -> En los presupuestos, al guardar uno, comprobar que todos los capítulos tienen subtotales

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@590 0c75b7a4-871f-7646-8a2f-f78d34cc349f
This commit is contained in:
David Arranz 2008-09-15 17:51:19 +00:00
parent db52b8d125
commit f3f7fd5c16
5 changed files with 159 additions and 58 deletions

View File

@ -53,57 +53,57 @@
<DelphiCompile Include="Base.dpk"> <DelphiCompile Include="Base.dpk">
<MainSource>MainSource</MainSource> <MainSource>MainSource</MainSource>
</DelphiCompile> </DelphiCompile>
<DCCReference Include="..\Modulos\Pedidos a proveedor\adortl.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\adortl.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\cxDataD11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\cxDataD11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\cxEditorsD11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\cxEditorsD11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\cxExportD11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\cxExportD11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\cxExtEditorsD11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\cxExtEditorsD11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\cxGridD11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\cxGridD11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\cxIntl6D11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\cxIntl6D11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\cxIntlPrintSys3D11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\cxIntlPrintSys3D11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\cxLibraryD11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\cxLibraryD11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\cxPageControlD11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\cxPageControlD11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\DataAbstract_Core_D11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\DataAbstract_Core_D11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\dbrtl.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\dbrtl.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\dclIndyCore.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\dclIndyCore.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\designide.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\designide.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\dsnap.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\dsnap.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\dxGDIPlusD11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\dxGDIPlusD11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\dxPSCoreD11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\dxPSCoreD11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\dxThemeD11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\dxThemeD11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\GUISDK_D11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\GUISDK_D11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\IndyCore.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\IndyCore.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\IndyProtocols.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\IndyProtocols.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\IndySystem.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\IndySystem.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\Jcl.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\Jcl.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JclVcl.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JclVcl.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JSDialog100.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JSDialog100.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JvCmpD11R.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JvCmpD11R.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JvCoreD11R.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JvCoreD11R.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JvCtrlsD11R.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JvCtrlsD11R.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JvDlgsD11R.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JvDlgsD11R.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JvMMD11R.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JvMMD11R.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JvNetD11R.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JvNetD11R.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JvPageCompsD11R.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JvPageCompsD11R.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JvStdCtrlsD11R.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JvStdCtrlsD11R.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\JvSystemD11R.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\JvSystemD11R.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\pckMD5.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\pckMD5.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\pckUCDataConnector.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\pckUCDataConnector.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\pckUserControl_RT.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\pckUserControl_RT.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\PngComponentsD10.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\PngComponentsD10.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\PNG_D10.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\PNG_D10.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\RemObjects_Core_D11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\RemObjects_Core_D11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\RemObjects_Indy_D11.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\RemObjects_Indy_D11.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\rtl.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\rtl.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\TB2k_D10.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\TB2k_D10.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\tbx_d10.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\tbx_d10.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\vcl.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\vcl.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\vclactnband.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\vclactnband.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\vcldb.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\vcldb.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\vcljpg.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\vcljpg.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\VclSmp.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\VclSmp.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\vclx.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\vclx.dcp" />
<DCCReference Include="..\Modulos\Pedidos a proveedor\xmlrtl.dcp" /> <DCCReference Include="..\Modulos\Presupuestos de cliente\Views\xmlrtl.dcp" />
<DCCReference Include="..\Servicios\FactuGES_Intf.pas" /> <DCCReference Include="..\Servicios\FactuGES_Intf.pas" />
<DCCReference Include="Conexion\uConfigurarConexion.pas"> <DCCReference Include="Conexion\uConfigurarConexion.pas">
<Form>fConfigurarConexion</Form> <Form>fConfigurarConexion</Form>

View File

@ -10,7 +10,7 @@ const
TIPO_DETALLE_SUBTOTAL = 'Subtotal'; TIPO_DETALLE_SUBTOTAL = 'Subtotal';
TIPO_DETALLE_SALTO = 'Salto'; TIPO_DETALLE_SALTO = 'Salto';
TIPO_DETALLE_DESCUENTO = 'Descuento'; TIPO_DETALLE_DESCUENTO = 'Descuento';
TIPO_DETALLE_OPCIONAL = 'Opcional';
CTE_DESC_SALTO = 'SALTO DE PAGINA >>'; CTE_DESC_SALTO = 'SALTO DE PAGINA >>';
type type
@ -19,7 +19,7 @@ type
IControllerDetallesBase = interface(ISujeto) IControllerDetallesBase = interface(ISujeto)
['{F0B0E714-EC0D-4B6B-98B1-76F72F70B735}'] ['{F0B0E714-EC0D-4B6B-98B1-76F72F70B735}']
function getTipo(ADataTable: IDAStronglyTypedDataTable; pPosicion: Integer): String; function GetTipo(ADataTable: IDAStronglyTypedDataTable; pPosicion: Integer): String;
procedure Clear(ADataTable: IDAStronglyTypedDataTable); procedure Clear(ADataTable: IDAStronglyTypedDataTable);
procedure Add(ADataTable: IDAStronglyTypedDataTable; TipoConcepto: Variant); procedure Add(ADataTable: IDAStronglyTypedDataTable; TipoConcepto: Variant);
procedure Delete(ADataTable: IDAStronglyTypedDataTable; Posicion: TIntegerArray); procedure Delete(ADataTable: IDAStronglyTypedDataTable; Posicion: TIntegerArray);
@ -35,6 +35,7 @@ type
function LocalizarPosicion(ADataTable: IDAStronglyTypedDataTable; const APosicion: Integer): Boolean; function LocalizarPosicion(ADataTable: IDAStronglyTypedDataTable; const APosicion: Integer): Boolean;
procedure Renumerar(DataTable: TDADataTable; LocalizaPosicion: Integer); procedure Renumerar(DataTable: TDADataTable; LocalizaPosicion: Integer);
function DarListaTiposDetalle: TStringList; function DarListaTiposDetalle: TStringList;
procedure ValidarCierreCapitulos(ADataTable: IDAStronglyTypedDataTable);
end; end;
TControllerDetallesBase = class (TSujeto, IControllerDetallesBase) TControllerDetallesBase = class (TSujeto, IControllerDetallesBase)
@ -63,6 +64,8 @@ type
procedure CalculoDetalleSubtotal(DataTable: TDADataTable; var ImporteAcumulado : Double; var ImporteTotal : Double); virtual; procedure CalculoDetalleSubtotal(DataTable: TDADataTable; var ImporteAcumulado : Double; var ImporteTotal : Double); virtual;
procedure TratamientoDetalleDescuento(DataTable: TDADataTable); virtual; procedure TratamientoDetalleDescuento(DataTable: TDADataTable); virtual;
procedure CalculoDetalleDescuento(DataTable: TDADataTable; var ImporteAcumulado : Double; var ImporteTotal : Double); virtual; procedure CalculoDetalleDescuento(DataTable: TDADataTable; var ImporteAcumulado : Double; var ImporteTotal : Double); virtual;
procedure TratamientoDetalleOpcional(DataTable: TDADataTable); virtual;
procedure CalculoDetalleOpcional(DataTable: TDADataTable; var ImporteAcumulado : Double; var ImporteTotal : Double); virtual;
//Si sobreescribimos este metodo es para continuar el CalcularTotales segun los tipos de concepto de los hijos //Si sobreescribimos este metodo es para continuar el CalcularTotales segun los tipos de concepto de los hijos
function CalcularTotalesHijos(Modificar: boolean; DataTable: TDADataTable; var ImporteAcumulado : Double; var ImporteTotal : Double): Double; virtual; function CalcularTotalesHijos(Modificar: boolean; DataTable: TDADataTable; var ImporteAcumulado : Double; var ImporteTotal : Double): Double; virtual;
@ -71,7 +74,7 @@ type
constructor Create; override; constructor Create; override;
destructor Destroy; override; destructor Destroy; override;
function getTipo(ADataTable: IDAStronglyTypedDataTable; pPosicion: Integer): String; function GetTipo(ADataTable: IDAStronglyTypedDataTable; pPosicion: Integer): String;
procedure Clear(ADataTable: IDAStronglyTypedDataTable); procedure Clear(ADataTable: IDAStronglyTypedDataTable);
procedure Add(ADataTable: IDAStronglyTypedDataTable; TipoConcepto: Variant); virtual; procedure Add(ADataTable: IDAStronglyTypedDataTable; TipoConcepto: Variant); virtual;
procedure Delete(ADataTable: IDAStronglyTypedDataTable; Posicion: TIntegerArray); virtual; procedure Delete(ADataTable: IDAStronglyTypedDataTable; Posicion: TIntegerArray); virtual;
@ -86,6 +89,9 @@ type
function DarTotalImporteTotal(ADataTable: IDAStronglyTypedDataTable): Double; function DarTotalImporteTotal(ADataTable: IDAStronglyTypedDataTable): Double;
function DarListaTiposDetalle: TStringList; virtual; function DarListaTiposDetalle: TStringList; virtual;
function LocalizarPosicion(ADataTable: IDAStronglyTypedDataTable; const APosicion: Integer): Boolean; function LocalizarPosicion(ADataTable: IDAStronglyTypedDataTable; const APosicion: Integer): Boolean;
// Comprueba que todos los capitulos tengan su subtotal de cierre
procedure ValidarCierreCapitulos(ADataTable: IDAStronglyTypedDataTable);
end; end;
@ -203,6 +209,13 @@ begin
TratamientoDetalleConcepto(DataTable); //Se podrá sobreescribir para que se tengan en cuenta nuevos campos TratamientoDetalleConcepto(DataTable); //Se podrá sobreescribir para que se tengan en cuenta nuevos campos
CalculoDetalleConcepto(DataTable, AuxImporteAcumulado, AuxImporteTotal); //Se podrá sobreescribir para posibles nuevos calculos de los hijos CalculoDetalleConcepto(DataTable, AuxImporteAcumulado, AuxImporteTotal); //Se podrá sobreescribir para posibles nuevos calculos de los hijos
end end
//OPCIONALES
else if (DataTable.FieldByName(CAMPO_TIPO).AsString = TIPO_DETALLE_OPCIONAL) then
begin
if Modificar then
TratamientoDetalleOpcional(DataTable); //Se podrá sobreescribir para que se tengan en cuenta nuevos campos en hijos
CalculoDetalleOpcional(DataTable, AuxImporteAcumulado, AuxImporteTotal); //Se podrá sobreescribir para posibles nuevos calculos de los hijos
end
//HIJOS //HIJOS
else CalcularTotalesHijos(Modificar, DataTable, AuxImporteAcumulado, AuxImporteTotal); else CalcularTotalesHijos(Modificar, DataTable, AuxImporteAcumulado, AuxImporteTotal);
@ -243,12 +256,18 @@ begin
begin begin
if not Editing then Edit; if not Editing then Edit;
ImporteDto := (-1)*((ImporteTotal * DataTable.FieldByName(CAMPO_DESCUENTO).AsFloat) / 100); ImporteDto := (-1)*((ImporteTotal * DataTable.FieldByName(CAMPO_DESCUENTO).AsFloat) / 100);
ImporteTotal := ImporteTotal + ImporteDto; ImporteTotal := ImporteTotal + ImporteDto;
FieldByName(CAMPO_IMPORTE_TOTAL).AsFloat := ImporteTotal; FieldByName(CAMPO_IMPORTE_TOTAL).AsFloat := ImporteTotal;
Post; Post;
end; end;
end; end;
procedure TControllerDetallesBase.CalculoDetalleOpcional(
DataTable: TDADataTable; var ImporteAcumulado, ImporteTotal: Double);
begin
// No acumular ni sumar nada.
end;
procedure TControllerDetallesBase.CalculoDetalleSalto(DataTable: TDADataTable; var ImporteAcumulado, ImporteTotal: Double); procedure TControllerDetallesBase.CalculoDetalleSalto(DataTable: TDADataTable; var ImporteAcumulado, ImporteTotal: Double);
begin begin
with DataTable do with DataTable do
@ -291,6 +310,7 @@ function TControllerDetallesBase.DarListaTiposDetalle: TStringList;
begin begin
Result := TStringList.Create; Result := TStringList.Create;
Result.Values[TIPO_DETALLE_CONCEPTO] := TIPO_DETALLE_CONCEPTO; Result.Values[TIPO_DETALLE_CONCEPTO] := TIPO_DETALLE_CONCEPTO;
Result.Values[TIPO_DETALLE_OPCIONAL] := TIPO_DETALLE_OPCIONAL;
Result.Values[TIPO_DETALLE_TITULO] := TIPO_DETALLE_TITULO; Result.Values[TIPO_DETALLE_TITULO] := TIPO_DETALLE_TITULO;
Result.Values[TIPO_DETALLE_SUBTOTAL] := TIPO_DETALLE_SUBTOTAL; Result.Values[TIPO_DETALLE_SUBTOTAL] := TIPO_DETALLE_SUBTOTAL;
//Result.Values[TIPO_DETALLE_DESCUENTO] := TIPO_DETALLE_DESCUENTO; //Result.Values[TIPO_DETALLE_DESCUENTO] := TIPO_DETALLE_DESCUENTO;
@ -589,6 +609,22 @@ begin
end; end;
end; end;
procedure TControllerDetallesBase.TratamientoDetalleOpcional(
DataTable: TDADataTable);
begin
with DataTable do
begin
if not Editing then Edit;
//Si alguno de los campos de calculo de total es nulo el total tambien será nulo
if (VarIsNull(FieldByName(CAMPO_CANTIDAD).AsVariant) or
VarIsNull(FieldByName(CAMPO_IMPORTE_UNIDAD).AsVariant)) then
FieldByName(CAMPO_IMPORTE_TOTAL).AsVariant := Null
else
FieldByName(CAMPO_IMPORTE_TOTAL).AsFloat := CalcularImporteTotalConcepto(DataTable);
Post;
end;
end;
procedure TControllerDetallesBase.TratamientoDetalleSalto(DataTable: TDADataTable); procedure TControllerDetallesBase.TratamientoDetalleSalto(DataTable: TDADataTable);
begin begin
with DataTable do with DataTable do
@ -629,7 +665,7 @@ begin
end; end;
end; end;
procedure TControllerDetallesBase.validarCampos(DataTable: TDADataTable); procedure TControllerDetallesBase.ValidarCampos(DataTable: TDADataTable);
var var
AField: TDAField; AField: TDAField;
begin begin
@ -651,4 +687,66 @@ begin
raise Exception.Create('Campo ' + CAMPO_IMPORTE_TOTAL + ' no encontrado (validarCampos)'); raise Exception.Create('Campo ' + CAMPO_IMPORTE_TOTAL + ' no encontrado (validarCampos)');
end; end;
procedure TControllerDetallesBase.ValidarCierreCapitulos(
ADataTable: IDAStronglyTypedDataTable);
var
ATipoCampo : String;
bEnCapitulo : Boolean;
AuxPosicionIni : Integer;
AuxPosicion : Integer;
begin
bEnCapitulo := False;
ATipoCampo := '';
if (ADataTable.DataTable.State in dsEditModes) then
ADataTable.DataTable.Post;
ValidarCampos(ADataTable.DataTable);
AuxPosicionIni := ADataTable.DataTable.FieldByName(CAMPO_POSICION).AsInteger;
AuxPosicion := 0;
BeginUpdate(ADataTable);
try
ADataTable.DataTable.First;
while ADataTable.DataTable.Locate(CAMPO_POSICION, AuxPosicion, []) do
begin
ATipoCampo := ADataTable.DataTable.FieldByName(CAMPO_TIPO).AsString;
if (ATipoCampo = TIPO_DETALLE_SUBTOTAL) and bEnCapitulo then
bEnCapitulo := False;
if (ATipoCampo = TIPO_DETALLE_TITULO) then
begin
if bEnCapitulo then
begin
ADataTable.DataTable.First;
if ADataTable.DataTable.Locate(CAMPO_POSICION, AuxPosicion-1, []) then
begin
Add(ADataTable, TIPO_DETALLE_SUBTOTAL);
bEnCapitulo := False;
end;
end
else
bEnCapitulo := True;
end;
Inc(AuxPosicion);
ADataTable.DataTable.First;
end;
// ¿Se ha acabado la tabla y queda algún capítulo sin cerrar?
if bEnCapitulo then
if ADataTable.DataTable.Locate(CAMPO_POSICION, AuxPosicion-1, []) then
begin
Add(ADataTable, TIPO_DETALLE_SUBTOTAL);
bEnCapitulo := False;
end;
finally
//Dejamos el puntero en la misma posición que la que partió
ADataTable.DataTable.Locate(CAMPO_POSICION, AuxPosicionIni, []);
EndUpdate(ADataTable);
end;
end;
end. end.

View File

@ -452,7 +452,10 @@ begin
if (APresupuesto.Detalles.DataTable.RecordCount = 0) then if (APresupuesto.Detalles.DataTable.RecordCount = 0) then
raise Exception.Create('El presupuesto debe tener en su contenido al menos un concepto'); raise Exception.Create('El presupuesto debe tener en su contenido al menos un concepto');
FDetallesController.ValidarCierreCapitulos(APresupuesto.Detalles);
{ Asegurarse de valores en campos "automáticos" tanto { Asegurarse de valores en campos "automáticos" tanto
en MODIFICACIÓN como en INSERCIÓN. } en MODIFICACIÓN como en INSERCIÓN. }
APresupuesto.Edit; APresupuesto.Edit;

Binary file not shown.

View File

@ -14,7 +14,7 @@ BEGIN
BEGIN BEGIN
VALUE "FileVersion", "1.3.1.0\0" VALUE "FileVersion", "1.3.1.0\0"
VALUE "ProductVersion", "1.3.1.0\0" VALUE "ProductVersion", "1.3.1.0\0"
VALUE "CompileDate", "miércoles, 10 de septiembre de 2008 18:00\0" VALUE "CompileDate", "lunes, 15 de septiembre de 2008 17:04\0"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"