diff --git a/Resources/Iconos/Inventario/16x16/InventarioObras.png b/Resources/Iconos/Inventario/16x16/InventarioObras.png new file mode 100644 index 00000000..ce000a4d Binary files /dev/null and b/Resources/Iconos/Inventario/16x16/InventarioObras.png differ diff --git a/Resources/Iconos/Inventario/24x24/InventarioObras.png b/Resources/Iconos/Inventario/24x24/InventarioObras.png new file mode 100644 index 00000000..41b7231c Binary files /dev/null and b/Resources/Iconos/Inventario/24x24/InventarioObras.png differ diff --git a/Resources/Iconos/Inventario/24x24/Thumbs.db b/Resources/Iconos/Inventario/24x24/Thumbs.db index b3056588..de5ae813 100644 Binary files a/Resources/Iconos/Inventario/24x24/Thumbs.db and b/Resources/Iconos/Inventario/24x24/Thumbs.db differ diff --git a/Resources/Iconos/Inventario/28x28/InventarioObras.png b/Resources/Iconos/Inventario/28x28/InventarioObras.png new file mode 100644 index 00000000..440886ab Binary files /dev/null and b/Resources/Iconos/Inventario/28x28/InventarioObras.png differ diff --git a/Resources/Iconos/Obras/16x16/Obras.png b/Resources/Iconos/Obras/16x16/Obras.png new file mode 100644 index 00000000..66a865d3 Binary files /dev/null and b/Resources/Iconos/Obras/16x16/Obras.png differ diff --git a/Resources/Iconos/Obras/24x24/Obras.png b/Resources/Iconos/Obras/24x24/Obras.png new file mode 100644 index 00000000..ef35b2ac Binary files /dev/null and b/Resources/Iconos/Obras/24x24/Obras.png differ diff --git a/Resources/Iconos/Obras/28x28/Obras.png b/Resources/Iconos/Obras/28x28/Obras.png new file mode 100644 index 00000000..67f65e76 Binary files /dev/null and b/Resources/Iconos/Obras/28x28/Obras.png differ diff --git a/Source/Base/Base.dproj b/Source/Base/Base.dproj index 1a96a865..bfcb9326 100644 --- a/Source/Base/Base.dproj +++ b/Source/Base/Base.dproj @@ -53,57 +53,57 @@ MainSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fConfigurarConexion
diff --git a/Source/Base/Utiles/uDataTableUtils.pas b/Source/Base/Utiles/uDataTableUtils.pas index 9d82981a..f6863eaf 100644 --- a/Source/Base/Utiles/uDataTableUtils.pas +++ b/Source/Base/Utiles/uDataTableUtils.pas @@ -84,8 +84,8 @@ begin end; ASource.Filter := ''; - if ASource.Active then - ASource.Close; +// if ASource.Active then +// ASource.Close; //Si no hay elemento seleccionados filtramos para que ATarget se quede vacia if (AObj.SelectedRecords.Count = 0) then @@ -98,7 +98,6 @@ begin ASource.Filter := ASource.Filter + ' or '; ASource.Filter := ASource.Filter + '(ID = ' + IntToStr(AObj.SelectedRecords.Items[i]) + ')'; end; - ASource.Filtered := True; end; @@ -112,8 +111,8 @@ begin ATarget.LogicalName := ASource.LogicalName; // We need to specify new dataset LogicalName ATarget.RemoteFetchEnabled := False; // "Desconectamos" la tabla destino del servidor - if not ASource.Active then - ASource.Open; +// if not ASource.Active then +// ASource.Open; ASource.First; DADataStreamer.WriteDataset(DABin, ASource, [woRows, woSchema], -1); diff --git a/Source/Cliente/FactuGES.dproj b/Source/Cliente/FactuGES.dproj index dfd84cc9..e287dcf0 100644 --- a/Source/Cliente/FactuGES.dproj +++ b/Source/Cliente/FactuGES.dproj @@ -54,7 +54,7 @@ Delphi.Personality VCLApplication -FalseTrueFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse1100FalseFalseFalseFalseFalse30821252Rodax Software S.L.1.1.0.0FactuGESFactuGES1.1.0.0 +FalseTrueFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse1200FalseFalseFalseFalseFalse30821252Rodax Software S.L.1.2.0.0FactuGESFactuGES1.2.0.0 diff --git a/Source/Cliente/FactuGES.rc b/Source/Cliente/FactuGES.rc index de70c028..58b90fec 100644 --- a/Source/Cliente/FactuGES.rc +++ b/Source/Cliente/FactuGES.rc @@ -1,7 +1,7 @@ MAINICON ICON "C:\Codigo Tecsitel\Resources\Iconos\Factuges.ico" 1 VERSIONINFO -FILEVERSION 1,1,0,0 -PRODUCTVERSION 1,1,0,0 +FILEVERSION 1,2,0,0 +PRODUCTVERSION 1,2,0,0 FILEFLAGSMASK 0x3FL FILEFLAGS 0x00L FILEOS 0x40004L @@ -13,10 +13,10 @@ BEGIN BLOCK "0C0A04E4" BEGIN VALUE "CompanyName", "Rodax Software S.L.\0" - VALUE "FileVersion", "1.1.0.0\0" + VALUE "FileVersion", "1.2.0.0\0" VALUE "InternalName", "FactuGES\0" VALUE "ProductName", "FactuGES\0" - VALUE "ProductVersion", "1.1.0.0\0" + VALUE "ProductVersion", "1.2.0.0\0" END END BLOCK "VarFileInfo" diff --git a/Source/Cliente/FactuGES.res b/Source/Cliente/FactuGES.res index 29941151..ac05f03c 100644 Binary files a/Source/Cliente/FactuGES.res and b/Source/Cliente/FactuGES.res differ diff --git a/Source/Modulos/Albaranes de proveedor/Controller/AlbaranesProveedor_controller.dproj b/Source/Modulos/Albaranes de proveedor/Controller/AlbaranesProveedor_controller.dproj index e06c5dd8..da25fc91 100644 --- a/Source/Modulos/Albaranes de proveedor/Controller/AlbaranesProveedor_controller.dproj +++ b/Source/Modulos/Albaranes de proveedor/Controller/AlbaranesProveedor_controller.dproj @@ -48,14 +48,14 @@ MainSource - - - - - - - - + + + + + + + + diff --git a/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas b/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas index 8dd8bc9e..74faa54d 100644 --- a/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas +++ b/Source/Modulos/Albaranes de proveedor/Controller/uAlbaranesProveedorController.pas @@ -337,7 +337,6 @@ begin AInventarioRecibido.DataTable.Active := True; end; - Self.Anadir(AAlbaran); CopiarPedidoAAlbaran(APedido, AAlbaran); CopiarArticulosAAlbaran(APedido, AAlbaran, AInventarioRecibido); RecalcularImportes(AAlbaran); diff --git a/Source/Modulos/Albaranes de proveedor/Controller/uDetallesAlbaranProveedorController.pas b/Source/Modulos/Albaranes de proveedor/Controller/uDetallesAlbaranProveedorController.pas index f85db022..a3b02e8a 100644 --- a/Source/Modulos/Albaranes de proveedor/Controller/uDetallesAlbaranProveedorController.pas +++ b/Source/Modulos/Albaranes de proveedor/Controller/uDetallesAlbaranProveedorController.pas @@ -42,7 +42,7 @@ type implementation -uses Variants, uDialogUtils, uControllerDetallesBase, uDataModuleAlbaranesProveedor, uArticulosAlbaranProveedorController, +uses uDAInterfaces, Variants, uDialogUtils, uControllerDetallesBase, uDataModuleAlbaranesProveedor, uArticulosAlbaranProveedorController, uDataTableUtils, uCalculosUtils, schArticulosClient_Intf; { TDetallesAlbaranProveedorController } @@ -126,6 +126,9 @@ end; procedure TDetallesAlbaranProveedorController.RellenarOtros(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); +var + AField: TDAField; + begin if Assigned(AArticulos) then ADetalles.DataTable.FieldByName(CAMPO_DESCUENTO).AsFloat := AArticulos.DESCUENTO @@ -135,8 +138,22 @@ begin //Sobreescribimos el id del articulo por el campo ID_ARTICULO que nos hemos tenido que crear para //almacenar el codigo de artículo ya que ID esta destinado a ID_ARTICULO||ID_PROVEEDOR, para identificar de forma //unica los articulos desglosados por proveedor. - ADetalles.DataTable.FieldByName(CAMPO_ID_ARTICULOS).AsVariant := AArticulos.DataTable.FieldByName(CAMPO_ID_ARTICULOS).AsVariant; - ADetalles.DataTable.FieldByName(CAMPO_REFERENCIA_FABRICANTE).AsVariant := AArticulos.DataTable.FieldByName(fld_ArticulosREFERENCIA_FABR).AsVariant; + //Validamos la existencia de todos los campos necesarios + AField := AArticulos.DataTable.FindField(CAMPO_ID_ARTICULOS); + if Assigned(AField) then + begin +// if not ADetalles.DataTable.Editing then +// ADetalles.DataTable.Edit; + ADetalles.DataTable.FieldByName(CAMPO_ID_ARTICULOS).AsVariant := AField.AsVariant; + end; + + AField := AArticulos.DataTable.FindField(fld_ArticulosREFERENCIA_FABR); + if Assigned(AField) then + begin +// if not ADetalles.DataTable.Editing then +// ADetalles.DataTable.Edit; + ADetalles.DataTable.FieldByName(CAMPO_REFERENCIA_FABRICANTE).AsVariant := AField.AsVariant; + end; end; procedure TDetallesAlbaranProveedorController.RellenarImportes(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); diff --git a/Source/Modulos/Facturas de proveedor/Controller/uDetallesFacturaProveedorController.pas b/Source/Modulos/Facturas de proveedor/Controller/uDetallesFacturaProveedorController.pas index 29f75936..8f5a8d75 100644 --- a/Source/Modulos/Facturas de proveedor/Controller/uDetallesFacturaProveedorController.pas +++ b/Source/Modulos/Facturas de proveedor/Controller/uDetallesFacturaProveedorController.pas @@ -45,7 +45,7 @@ implementation { TDetallesFacturaProveedorController } -uses Variants, uDataModuleFacturasProveedor, uArticulosFacturaProveedorController, +uses uDAInterfaces, Variants, uDataModuleFacturasProveedor, uArticulosFacturaProveedorController, uControllerDetallesBase, Dialogs, SysUtils, uDialogUtils, uCalculosUtils, schArticulosClient_Intf; procedure TDetallesFacturaProveedorController.ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); @@ -132,6 +132,9 @@ begin end; procedure TDetallesFacturaProveedorController.RellenarOtros(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); +var + AField: TDAField; + begin if Assigned(AArticulos) then ADetalles.DataTable.FieldByName(CAMPO_DESCUENTO).AsFloat := AArticulos.DESCUENTO @@ -141,8 +144,13 @@ begin //Sobreescribimos el id del articulo por el campo ID_ARTICULO que nos hemos tenido que crear para //almacenar el codigo de artículo ya que ID esta destinado a ID_ARTICULO||ID_PROVEEDOR, para identificar de forma //unica los articulos desglosados por proveedor. - ADetalles.DataTable.FieldByName(CAMPO_ID_ARTICULOS).AsVariant := AArticulos.DataTable.FieldByName(CAMPO_ID_ARTICULOS).AsVariant; - ADetalles.DataTable.FieldByName(CAMPO_REFERENCIA_FABRICANTE).AsVariant := AArticulos.DataTable.FieldByName(fld_ArticulosREFERENCIA_FABR).AsVariant; + AField := AArticulos.DataTable.FindField(CAMPO_ID_ARTICULOS); + if Assigned(AField) then + ADetalles.DataTable.FieldByName(CAMPO_ID_ARTICULOS).AsVariant := AField.AsVariant; + + AField := AArticulos.DataTable.FindField(fld_ArticulosREFERENCIA_FABR); + if Assigned(AField) then + ADetalles.DataTable.FieldByName(fld_ArticulosREFERENCIA_FABR).AsVariant := AField.AsVariant; end; procedure TDetallesFacturaProveedorController.ValidarCampos(DataTable: TDADataTable); diff --git a/Source/Modulos/Inventario/Controller/Inventario_controller.dpk b/Source/Modulos/Inventario/Controller/Inventario_controller.dpk index b9db5723..5d85b5b1 100644 --- a/Source/Modulos/Inventario/Controller/Inventario_controller.dpk +++ b/Source/Modulos/Inventario/Controller/Inventario_controller.dpk @@ -32,7 +32,9 @@ requires PresupuestosCliente_model, PresupuestosCliente_controller, PedidosProveedor_controller, - PedidosProveedor_model; + PedidosProveedor_model, + Obras_controller, + Obras_model; contains uIEditorInventario in 'View\uIEditorInventario.pas', diff --git a/Source/Modulos/Inventario/Controller/Inventario_controller.dproj b/Source/Modulos/Inventario/Controller/Inventario_controller.dproj index b94cda3a..82eb23d7 100644 --- a/Source/Modulos/Inventario/Controller/Inventario_controller.dproj +++ b/Source/Modulos/Inventario/Controller/Inventario_controller.dproj @@ -46,14 +46,16 @@ MainSource - - - - - - - - + + + + + + + + + +
dmInventarioUtils
TDataModule diff --git a/Source/Modulos/Inventario/Controller/View/uIEditorInventario.pas b/Source/Modulos/Inventario/Controller/View/uIEditorInventario.pas index 9592d6b9..b4e6b0b9 100644 --- a/Source/Modulos/Inventario/Controller/View/uIEditorInventario.pas +++ b/Source/Modulos/Inventario/Controller/View/uIEditorInventario.pas @@ -8,6 +8,10 @@ uses type IEditorInventario = interface(IEditorGridBase) ['{D9C21CA9-5923-4F89-ABBC-81128D2F5272}'] + function GetTipoInventario: String; + procedure SetTipoInventario(const Value: String); + property TipoInventario: String read GetTipoInventario write SetTipoInventario; + function GetInventario: IBizInventario; procedure SetInventario(const Value: IBizInventario); property Inventario: IBizInventario read GetInventario write SetInventario; diff --git a/Source/Modulos/Inventario/Controller/uInventarioController.pas b/Source/Modulos/Inventario/Controller/uInventarioController.pas index 26fcc90d..f08c5209 100644 --- a/Source/Modulos/Inventario/Controller/uInventarioController.pas +++ b/Source/Modulos/Inventario/Controller/uInventarioController.pas @@ -6,9 +6,13 @@ interface uses Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, uIDataModuleInventario, uBizInventario, uArticulosInventarioController, - uAlmacenesController, uPresupuestosClienteController, uBizPresupuestosCliente, - uPedidosProveedorController, uBizPedidosProveedor, uBizArticulos, - uBizAlmacenes; + uAlmacenesController, uObrasController, uPresupuestosClienteController, + uBizPresupuestosCliente, uPedidosProveedorController, uBizPedidosProveedor, + uBizArticulos, uBizAlmacenes, uBizObras; + +const + CTE_INV_ALMACEN = 'ALMACEN'; + CTE_INV_OBRA = 'OBRA'; type IInventarioController = interface(IObservador) @@ -19,14 +23,16 @@ type function Trasladar(AInventario : IBizInventario; Todos: Boolean): Boolean; // procedure RecibirArticulos(Const APedido: IBizPedidoProveedor; Const CodigoAlmacenDes: Integer); overload; // procedure RecibirPedidos(Const CodigoAlmacenDes: Integer); - procedure Reservar(AInventario : IBizInventario); + procedure Reservar(AInventario: IBizInventario; Const CodigoAlmacenDestino: Integer); function Liberar(AInventario : IBizInventario): Boolean; function Ver(AArticulos: IBizInventario; AInventario : IBizInventario; APedido: IBizPedidoProveedor = Nil): Boolean; - procedure VerTodos(AInventario: IBizInventario); + procedure VerTodos(AInventario: IBizInventario; const pTipoInventario: String); procedure VerReservas(AArticulo: IBizInventario); function BuscarTodos: IBizInventario; + function BuscarTodosAlmacenes: IBizInventario; + function BuscarTodosObras: IBizInventario; function Buscar(const ID_ALMACEN: Integer): IBizInventario; function BuscarDetalleReservas: IBizDetalleReservas; function ExtraerSeleccionados(AArticulos: IBizInventario) : IBizInventario; @@ -44,25 +50,31 @@ type procedure SetAlmacenesController(const Value: IAlmacenesController); property AlmacenesController: IAlmacenesController read GetAlmacenesController write SetAlmacenesController; + function GetObrasController: IObrasController; + procedure SetObrasController(const Value: IObrasController); + property ObrasController: IObrasController read GetObrasController write SetObrasController; + procedure Copiar(AArticulos: IBizInventario; ADetalles: IDAStronglyTypedDataTable; AInventario: IBizInventario); overload; end; TInventarioController = class(TObservador, IInventarioController) private FAlmacenesController: IAlmacenesController; + FObrasController: IObrasController; FArticulosController : IArticulosInventarioController; FPresupuestosClienteController : IPresupuestosClienteController; FPedidosProveedorController : IPedidosProveedorController; function GetAlmacenesController: IAlmacenesController; + function GetObrasController: IObrasController; function GetArticulosController: IArticulosInventarioController; function GetPresupuestosClienteController: IPresupuestosClienteController; function GetPedidosProveedorController: IPedidosProveedorController; procedure SetAlmacenesController(const Value: IAlmacenesController); + procedure SetObrasController(const Value: IObrasController); procedure SetArticulosController(const Value: IArticulosInventarioController); procedure SetPresupuestosClienteController(const Value: IPresupuestosClienteController); procedure SetPedidosProveedorController(const Value: IPedidosProveedorController); - function Reservar(AInventario : IBizInventario; Todos: Boolean; Const APedido: IBizPresupuestoCliente): Boolean; overload; function Liberar(AInventario : IBizInventario; Todos: Boolean): Boolean; overload; function EntradaSalidaArticulos(AArticulos, AInventario : IBizInventario; APedido: IBizPedidoProveedor = Nil): Boolean; overload; @@ -89,6 +101,7 @@ type public property AlmacenesController: IAlmacenesController read GetAlmacenesController write SetAlmacenesController; + property ObrasController: IObrasController read GetObrasController write SetObrasController; property ArticulosController: IArticulosInventarioController read GetArticulosController write SetArticulosController; property PresupuestosClienteController: IPresupuestosClienteController read GetPresupuestosClienteController write SetPresupuestosClienteController; property PedidosProveedorController: IPedidosProveedorController read GetPedidosProveedorController write SetPedidosProveedorController; @@ -104,6 +117,8 @@ type function Buscar(const ID_ALMACEN: Integer): IBizInventario; function BuscarTodos: IBizInventario; + function BuscarTodosAlmacenes: IBizInventario; + function BuscarTodosObras: IBizInventario; function BuscarDetalleReservas: IBizDetalleReservas; function ElegirArticulos(AArticulos : IBizInventario; AMensaje: String; AMultiSelect: Boolean): IBizInventario; function ExtraerSeleccionados(AArticulos: IBizInventario) : IBizInventario; @@ -116,8 +131,9 @@ type procedure TrasladarArticulosLibre(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer; Const CodigoAlmacenDestino: Integer); function EntradaPedido(AInventario: IBizInventario; APedido: IBizPedidoProveedor; ADetalles: IDAStronglyTypedDataTable; var ADetallesFinal: IBizInventario): Boolean; function SalidaAlbaran(AInventario: IBizInventario; Const CodigoAlmacenOrigen: Integer; ADetalles: IDAStronglyTypedDataTable): Boolean; + procedure Reservar(AInventario: IBizInventario; Const CodigoAlmacenDestino: Integer); - procedure VerTodos(AInventario: IBizInventario); + procedure VerTodos(AInventario: IBizInventario; const pTipoInventario: String); function Ver(AArticulos: IBizInventario; AInventario : IBizInventario; APedido: IBizPedidoProveedor = Nil): Boolean; procedure VerReservas(AArticulo: IBizInventario); @@ -125,7 +141,6 @@ type function Guardar(AArticulos : IBizInventario; const FechaMovimiento: TDateTime; const CausaMovimiento: String): Boolean; function Liberar(AInventario : IBizInventario): Boolean; overload; - procedure Reservar(AInventario : IBizInventario); overload; end; implementation @@ -139,7 +154,7 @@ uses uControllerDetallesBase, uDialogUtils, uFactuGES_App, uIEditorEntradaSalidaArticulos, schArticulosClient_Intf, uIEditorElegirArticulosAlmacen, uInventarioUtils, - uIEditorDetalleReservas; + uIEditorDetalleReservas, schAlmacenesClient_Intf; { TInventarioController } @@ -195,6 +210,54 @@ begin FiltrarEmpresa(Result); end; +function TInventarioController.BuscarTodosAlmacenes: IBizInventario; +var + Condicion: TDAWhereExpression; +begin + ShowHourglassCursor; + try + Result := BuscarTodos; + + // Filtrar los pedidos pendientes de recepcion + with Result.DataTable.DynamicWhere do + begin + // (TIPO_ALMACEN <> ALMACEN) + Condicion := NewBinaryExpression(NewField('', fld_InventarioTIPO_ALMACEN), NewConstant(CTE_INV_ALMACEN, datString), dboEqual); + + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end; + finally + HideHourglassCursor; + end; +end; + +function TInventarioController.BuscarTodosObras: IBizInventario; +var + Condicion: TDAWhereExpression; +begin + ShowHourglassCursor; + try + Result := BuscarTodos; + + // Filtrar los pedidos pendientes de recepcion + with Result.DataTable.DynamicWhere do + begin + // (TIPO_ALMACEN <> ALMACEN) + Condicion := NewBinaryExpression(NewField('', fld_InventarioTIPO_ALMACEN), NewConstant(CTE_INV_OBRA, datString), dboEqual); + + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end; + finally + HideHourglassCursor; + end; +end; + procedure TInventarioController.Copiar(AArticulos: IBizInventario; ADetalles: IDAStronglyTypedDataTable; AInventario: IBizInventario); { Procedimiento que copia en AArticulos, todos los detalles pasados por parametro ADetalles @@ -284,6 +347,7 @@ begin AsignarDataModule; FArticulosController := TArticulosInventarioController.Create; FAlmacenesController := TAlmacenesController.Create; + FObrasController := TObrasController.Create; FPresupuestosClienteController := TPresupuestosClienteController.Create; FPedidosProveedorController := TPedidosProveedorController.Create; end; @@ -316,6 +380,7 @@ begin FDataModule := Nil; FArticulosController := Nil; FAlmacenesController := Nil; + FObrasController := Nil; FPresupuestosClienteController := Nil; FPedidosProveedorController := Nil; inherited; @@ -497,7 +562,7 @@ begin end; end; -procedure TInventarioController.VerTodos(AInventario: IBizInventario); +procedure TInventarioController.VerTodos(AInventario: IBizInventario; const pTipoInventario: String); var AEditor : IEditorInventario; begin @@ -509,6 +574,7 @@ begin with AEditor do begin Controller := Self; //OJO ORDEN MUY IMPORTANTE + TipoInventario := pTipoInventario; Inventario := AInventario; MultiSelect := False; ShowEmbedded; @@ -671,6 +737,23 @@ begin // end; +procedure TInventarioController.Reservar(AInventario: IBizInventario; const CodigoAlmacenDestino: Integer); +var + AArticulos: IBizInventario; +begin + try + AArticulos := Buscar(ID_NULO); + + //Se queda en la clase de negocio para así todos y cada uno de los artículos que + //se agreguen se asigne automáticamente el codigo de almacen destino en OnNewRecord +// AArticulos.TipoMovimiento := tEntradaLibre; +// AArticulos.IDAlmacenDestino := CodigoAlmacenDestino; + EntradaSalidaArticulos(AArticulos, AInventario); + finally + AArticulos := Nil; + end; +end; + {procedure TInventarioController.RecibirPedidos(const CodigoAlmacenDes: Integer); var APedido: IBizPedidoProveedor; @@ -688,72 +771,6 @@ begin end;} -procedure TInventarioController.Reservar(AInventario : IBizInventario); -var - APresupuesto: IBizPresupuestoCliente; -begin - if not Assigned(AInventario) then - exit; - - try - APresupuesto := FPresupuestosClienteController.BuscarPendientes; - APresupuesto := FPresupuestosClienteController.ElegirPresupuestos(APresupuesto, '', False); - - if Assigned(APresupuesto) then - Reservar(AInventario, False, APresupuesto); - - finally - APresupuesto := Nil; - end; -end; - -function TInventarioController.Reservar(AInventario : IBizInventario; Todos: Boolean; const APedido: IBizPresupuestoCliente): Boolean; -begin - - Result := False; - -{ if not Assigned(AInventario) then - exit; - - try - with AInventario.DataTable do - begin - if not Active then - Active := True; - - if Todos then - begin - First; - while not EOF do - begin - Edit; - AInventario.ID_PEDIDO_CLIENTE := APedido.ID; - AInventario.REFERENCIA_PED_CLI := APedido.REFERENCIA; - Post; - Next; - end; - end - else - begin - Edit; - AInventario.ID_PEDIDO_CLIENTE := APedido.ID; - AInventario.REFERENCIA_PED_CLI := APedido.REFERENCIA; - Post; - end; - - ApplyUpdates; - Result := True; - end; - except - on E: EDAApplyUpdateFailed do - begin - AInventario.DataTable.CancelUpdates; - showmessage('Error al reservar para el pedido'); - end; - end; -} -end; - function TInventarioController.SalidaAlbaran(AInventario: IBizInventario; const CodigoAlmacenOrigen: Integer; ADetalles: IDAStronglyTypedDataTable): Boolean; var AArticulos: IBizInventario; @@ -797,6 +814,11 @@ begin FAlmacenesController := Value; end; +procedure TInventarioController.SetObrasController(const Value: IObrasController); +begin + FObrasController := Value; +end; + procedure TInventarioController.SetArticulosController(const Value: IArticulosInventarioController); begin FArticulosController := Value @@ -911,6 +933,11 @@ begin Result := FAlmacenesController; end; +function TInventarioController.GetObrasController: IObrasController; +begin + Result := FObrasController; +end; + function TInventarioController.GetArticulosController: IArticulosInventarioController; begin Result := FArticulosController; diff --git a/Source/Modulos/Inventario/Data/uDataModuleInventario.dfm b/Source/Modulos/Inventario/Data/uDataModuleInventario.dfm index 1eb75f59..0416e48b 100644 --- a/Source/Modulos/Inventario/Data/uDataModuleInventario.dfm +++ b/Source/Modulos/Inventario/Data/uDataModuleInventario.dfm @@ -207,14 +207,17 @@ inherited DataModuleInventario: TDataModuleInventario DisplayLabel = 'Pendiente de recibir' DictionaryEntry = 'INVENTARIO_PENDIENTE_RECEPCION' end + item + Name = 'TIPO_ALMACEN' + DataType = datString + Size = 10 + end item Name = 'ID' DataType = datInteger - LogChanges = False DisplayLabel = 'INVENTARIO_ID' DictionaryEntry = 'INVENTARIO_ID' InPrimaryKey = True - Calculated = True end item Name = 'CANTIDAD' diff --git a/Source/Modulos/Inventario/Inventario_Group.groupproj b/Source/Modulos/Inventario/Inventario_Group.groupproj index ed0b964c..a1094801 100644 --- a/Source/Modulos/Inventario/Inventario_Group.groupproj +++ b/Source/Modulos/Inventario/Inventario_Group.groupproj @@ -11,6 +11,8 @@ + + @@ -95,6 +97,15 @@ + + + + + + + + + @@ -131,14 +142,23 @@ + + + + + + + + + - + - + - + \ No newline at end of file diff --git a/Source/Modulos/Inventario/Model/schInventarioClient_Intf.pas b/Source/Modulos/Inventario/Model/schInventarioClient_Intf.pas index 911ceee9..af2a41c2 100644 --- a/Source/Modulos/Inventario/Model/schInventarioClient_Intf.pas +++ b/Source/Modulos/Inventario/Model/schInventarioClient_Intf.pas @@ -9,8 +9,8 @@ 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_Inventario = '{0C73DA8F-2528-4826-B262-E5B7F28AE644}'; - RID_DetalleReservas = '{EC76928D-0721-4595-BB59-A63FA3CD75DF}'; + RID_Inventario = '{EF34850B-0D51-4B0C-8CD5-4C9DD0CEA30A}'; + RID_DetalleReservas = '{B4EFAB5C-C1A7-4932-991F-C6641A5456CD}'; { Data table names } nme_Inventario = 'Inventario'; @@ -28,6 +28,7 @@ const fld_InventarioUNIDADES_ALMACEN = 'UNIDADES_ALMACEN'; fld_InventarioRESERVA = 'RESERVA'; fld_InventarioPENDIENTE_RECEPCION = 'PENDIENTE_RECEPCION'; + fld_InventarioTIPO_ALMACEN = 'TIPO_ALMACEN'; fld_InventarioID = 'ID'; fld_InventarioCANTIDAD = 'CANTIDAD'; fld_InventarioFECHA_MOVIMIENTO = 'FECHA_MOVIMIENTO'; @@ -46,11 +47,12 @@ const idx_InventarioUNIDADES_ALMACEN = 8; idx_InventarioRESERVA = 9; idx_InventarioPENDIENTE_RECEPCION = 10; - idx_InventarioID = 11; - idx_InventarioCANTIDAD = 12; - idx_InventarioFECHA_MOVIMIENTO = 13; - idx_InventarioCAUSA = 14; - idx_InventarioTIPO = 15; + idx_InventarioTIPO_ALMACEN = 11; + idx_InventarioID = 12; + idx_InventarioCANTIDAD = 13; + idx_InventarioFECHA_MOVIMIENTO = 14; + idx_InventarioCAUSA = 15; + idx_InventarioTIPO = 16; { DetalleReservas fields } fld_DetalleReservasID_ALB = 'ID_ALB'; @@ -89,7 +91,7 @@ const type { IInventario } IInventario = interface(IDAStronglyTypedDataTable) - ['{01E8B549-9E00-473C-8C13-6230053472A1}'] + ['{42DB1B40-71E1-454F-93DC-E35E6FE3EEE1}'] { Property getters and setters } function GetID_ALMACENValue: Integer; procedure SetID_ALMACENValue(const aValue: Integer); @@ -135,6 +137,10 @@ type procedure SetPENDIENTE_RECEPCIONValue(const aValue: Int64); function GetPENDIENTE_RECEPCIONIsNull: Boolean; procedure SetPENDIENTE_RECEPCIONIsNull(const aValue: Boolean); + function GetTIPO_ALMACENValue: String; + procedure SetTIPO_ALMACENValue(const aValue: String); + function GetTIPO_ALMACENIsNull: Boolean; + procedure SetTIPO_ALMACENIsNull(const aValue: Boolean); function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); function GetIDIsNull: Boolean; @@ -180,6 +186,8 @@ type property RESERVAIsNull: Boolean read GetRESERVAIsNull write SetRESERVAIsNull; property PENDIENTE_RECEPCION: Int64 read GetPENDIENTE_RECEPCIONValue write SetPENDIENTE_RECEPCIONValue; property PENDIENTE_RECEPCIONIsNull: Boolean read GetPENDIENTE_RECEPCIONIsNull write SetPENDIENTE_RECEPCIONIsNull; + property TIPO_ALMACEN: String read GetTIPO_ALMACENValue write SetTIPO_ALMACENValue; + property TIPO_ALMACENIsNull: Boolean read GetTIPO_ALMACENIsNull write SetTIPO_ALMACENIsNull; property ID: Integer read GetIDValue write SetIDValue; property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull; property CANTIDAD: Integer read GetCANTIDADValue write SetCANTIDADValue; @@ -241,6 +249,10 @@ type procedure SetPENDIENTE_RECEPCIONValue(const aValue: Int64); virtual; function GetPENDIENTE_RECEPCIONIsNull: Boolean; virtual; procedure SetPENDIENTE_RECEPCIONIsNull(const aValue: Boolean); virtual; + function GetTIPO_ALMACENValue: String; virtual; + procedure SetTIPO_ALMACENValue(const aValue: String); virtual; + function GetTIPO_ALMACENIsNull: Boolean; virtual; + procedure SetTIPO_ALMACENIsNull(const aValue: Boolean); virtual; function GetIDValue: Integer; virtual; procedure SetIDValue(const aValue: Integer); virtual; function GetIDIsNull: Boolean; virtual; @@ -285,6 +297,8 @@ type property RESERVAIsNull: Boolean read GetRESERVAIsNull write SetRESERVAIsNull; property PENDIENTE_RECEPCION: Int64 read GetPENDIENTE_RECEPCIONValue write SetPENDIENTE_RECEPCIONValue; property PENDIENTE_RECEPCIONIsNull: Boolean read GetPENDIENTE_RECEPCIONIsNull write SetPENDIENTE_RECEPCIONIsNull; + property TIPO_ALMACEN: String read GetTIPO_ALMACENValue write SetTIPO_ALMACENValue; + property TIPO_ALMACENIsNull: Boolean read GetTIPO_ALMACENIsNull write SetTIPO_ALMACENIsNull; property ID: Integer read GetIDValue write SetIDValue; property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull; property CANTIDAD: Integer read GetCANTIDADValue write SetCANTIDADValue; @@ -304,7 +318,7 @@ type { IDetalleReservas } IDetalleReservas = interface(IDAStronglyTypedDataTable) - ['{FF881AE1-5043-485D-9E10-52B956FB4276}'] + ['{BFD1131A-A0B0-4AA4-B8A0-84D8F5D873EF}'] { Property getters and setters } function GetID_ALBValue: Integer; procedure SetID_ALBValue(const aValue: Integer); @@ -751,6 +765,27 @@ begin DataTable.Fields[idx_InventarioPENDIENTE_RECEPCION].AsVariant := Null; end; +function TInventarioDataTableRules.GetTIPO_ALMACENValue: String; +begin + result := DataTable.Fields[idx_InventarioTIPO_ALMACEN].AsString; +end; + +procedure TInventarioDataTableRules.SetTIPO_ALMACENValue(const aValue: String); +begin + DataTable.Fields[idx_InventarioTIPO_ALMACEN].AsString := aValue; +end; + +function TInventarioDataTableRules.GetTIPO_ALMACENIsNull: boolean; +begin + result := DataTable.Fields[idx_InventarioTIPO_ALMACEN].IsNull; +end; + +procedure TInventarioDataTableRules.SetTIPO_ALMACENIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_InventarioTIPO_ALMACEN].AsVariant := Null; +end; + function TInventarioDataTableRules.GetIDValue: Integer; begin result := DataTable.Fields[idx_InventarioID].AsInteger; diff --git a/Source/Modulos/Inventario/Model/schInventarioServer_Intf.pas b/Source/Modulos/Inventario/Model/schInventarioServer_Intf.pas index 8e27a333..a1801879 100644 --- a/Source/Modulos/Inventario/Model/schInventarioServer_Intf.pas +++ b/Source/Modulos/Inventario/Model/schInventarioServer_Intf.pas @@ -9,13 +9,13 @@ 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_InventarioDelta = '{552B07EE-8CC1-4A6C-ACC8-1B9D569F37CD}'; - RID_DetalleReservasDelta = '{0640D81A-8FD0-47AB-AB37-F4A91844711C}'; + RID_InventarioDelta = '{44A696E0-2F61-4AFE-9226-6DC8AEC03305}'; + RID_DetalleReservasDelta = '{44070FBD-E2B5-4D2E-AE8F-5AA97849CBA6}'; type { IInventarioDelta } IInventarioDelta = interface(IInventario) - ['{552B07EE-8CC1-4A6C-ACC8-1B9D569F37CD}'] + ['{44A696E0-2F61-4AFE-9226-6DC8AEC03305}'] { Property getters and setters } function GetOldID_ALMACENValue : Integer; function GetOldID_ARTICULOValue : Integer; @@ -28,6 +28,7 @@ type function GetOldUNIDADES_ALMACENValue : Int64; function GetOldRESERVAValue : Int64; function GetOldPENDIENTE_RECEPCIONValue : Int64; + function GetOldTIPO_ALMACENValue : String; function GetOldIDValue : Integer; function GetOldCANTIDADValue : Integer; function GetOldFECHA_MOVIMIENTOValue : DateTime; @@ -46,6 +47,7 @@ type property OldUNIDADES_ALMACEN : Int64 read GetOldUNIDADES_ALMACENValue; property OldRESERVA : Int64 read GetOldRESERVAValue; property OldPENDIENTE_RECEPCION : Int64 read GetOldPENDIENTE_RECEPCIONValue; + property OldTIPO_ALMACEN : String read GetOldTIPO_ALMACENValue; property OldID : Integer read GetOldIDValue; property OldCANTIDAD : Integer read GetOldCANTIDADValue; property OldFECHA_MOVIMIENTO : DateTime read GetOldFECHA_MOVIMIENTOValue; @@ -124,6 +126,12 @@ type function GetOldPENDIENTE_RECEPCIONIsNull: Boolean; virtual; procedure SetPENDIENTE_RECEPCIONValue(const aValue: Int64); virtual; procedure SetPENDIENTE_RECEPCIONIsNull(const aValue: Boolean); virtual; + function GetTIPO_ALMACENValue: String; virtual; + function GetTIPO_ALMACENIsNull: Boolean; virtual; + function GetOldTIPO_ALMACENValue: String; virtual; + function GetOldTIPO_ALMACENIsNull: Boolean; virtual; + procedure SetTIPO_ALMACENValue(const aValue: String); virtual; + procedure SetTIPO_ALMACENIsNull(const aValue: Boolean); virtual; function GetIDValue: Integer; virtual; function GetIDIsNull: Boolean; virtual; function GetOldIDValue: Integer; virtual; @@ -200,6 +208,10 @@ type property PENDIENTE_RECEPCIONIsNull : Boolean read GetPENDIENTE_RECEPCIONIsNull write SetPENDIENTE_RECEPCIONIsNull; property OldPENDIENTE_RECEPCION : Int64 read GetOldPENDIENTE_RECEPCIONValue; property OldPENDIENTE_RECEPCIONIsNull : Boolean read GetOldPENDIENTE_RECEPCIONIsNull; + property TIPO_ALMACEN : String read GetTIPO_ALMACENValue write SetTIPO_ALMACENValue; + property TIPO_ALMACENIsNull : Boolean read GetTIPO_ALMACENIsNull write SetTIPO_ALMACENIsNull; + property OldTIPO_ALMACEN : String read GetOldTIPO_ALMACENValue; + property OldTIPO_ALMACENIsNull : Boolean read GetOldTIPO_ALMACENIsNull; property ID : Integer read GetIDValue write SetIDValue; property IDIsNull : Boolean read GetIDIsNull write SetIDIsNull; property OldID : Integer read GetOldIDValue; @@ -229,7 +241,7 @@ type { IDetalleReservasDelta } IDetalleReservasDelta = interface(IDetalleReservas) - ['{0640D81A-8FD0-47AB-AB37-F4A91844711C}'] + ['{44070FBD-E2B5-4D2E-AE8F-5AA97849CBA6}'] { Property getters and setters } function GetOldID_ALBValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -786,6 +798,37 @@ begin BusinessProcessor.CurrentChange.NewValueByName[fld_InventarioPENDIENTE_RECEPCION] := Null; end; +function TInventarioBusinessProcessorRules.GetTIPO_ALMACENValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_InventarioTIPO_ALMACEN]; +end; + +function TInventarioBusinessProcessorRules.GetTIPO_ALMACENIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_InventarioTIPO_ALMACEN]); +end; + +function TInventarioBusinessProcessorRules.GetOldTIPO_ALMACENValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_InventarioTIPO_ALMACEN]; +end; + +function TInventarioBusinessProcessorRules.GetOldTIPO_ALMACENIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_InventarioTIPO_ALMACEN]); +end; + +procedure TInventarioBusinessProcessorRules.SetTIPO_ALMACENValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_InventarioTIPO_ALMACEN] := aValue; +end; + +procedure TInventarioBusinessProcessorRules.SetTIPO_ALMACENIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_InventarioTIPO_ALMACEN] := Null; +end; + function TInventarioBusinessProcessorRules.GetIDValue: Integer; begin result := BusinessProcessor.CurrentChange.NewValueByName[fld_InventarioID]; diff --git a/Source/Modulos/Inventario/Model/uBizInventario.pas b/Source/Modulos/Inventario/Model/uBizInventario.pas index cfb9ceb0..3fcce694 100644 --- a/Source/Modulos/Inventario/Model/uBizInventario.pas +++ b/Source/Modulos/Inventario/Model/uBizInventario.pas @@ -57,6 +57,9 @@ type FSeleccionableInterface : ISeleccionable; procedure OnNewRecord(Sender: TDADataTable); override; procedure OnCalcFields(Sender: TDADataTable); override; + procedure BeforeOpen(Sender: TDADataTable); override; + procedure AfterOpen(Sender: TDADataTable); override; + public property IDAlmacenOrigen: Integer read GetIDAlmacenOrigen write SetIDAlmacenOrigen; @@ -66,16 +69,45 @@ type write FSeleccionableInterface implements ISeleccionable; constructor Create(aDataTable: TDADataTable); override; + destructor Destroy; override; end; implementation uses - Dialogs, uDACDSDataTable, SysUtils; + Dialogs, uDataTableUtils, SysUtils; { TBizInventario } +procedure TBizInventario.AfterOpen(Sender: TDADataTable); +var + Contador: Integer; +begin + inherited; + DesconectarTabla(Sender); + Sender.First; + Contador := 1; + while not Sender.EOF do + begin + if not Sender.Editing then + Sender.Edit; + Sender.FieldByName('ID').AsInteger := Contador; + Inc(Contador); + Sender.Next; + end; + ConectarTabla(Sender); + + +// +end; + +procedure TBizInventario.BeforeOpen(Sender: TDADataTable); +begin + inherited; +// +end; + constructor TBizInventario.Create(aDataTable: TDADataTable); begin inherited; diff --git a/Source/Modulos/Inventario/Plugin/uPluginInventario.dfm b/Source/Modulos/Inventario/Plugin/uPluginInventario.dfm index cbf19ee5..e6b5662e 100644 --- a/Source/Modulos/Inventario/Plugin/uPluginInventario.dfm +++ b/Source/Modulos/Inventario/Plugin/uPluginInventario.dfm @@ -1,6 +1,6 @@ object PluginInventario: TPluginInventario OldCreateOrder = True - DefaultAction = actInventario + DefaultAction = actInventarioAlmacenes Description = 'Ventas' ModuleMenu = MainMenu ModuleName = 'Articulos' @@ -38,6 +38,125 @@ object PluginInventario: TPluginInventario 49454E44AE426082} Name = 'PngImage0' Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD25200000A4F694343505068 + 6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7 + DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1 + 114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1 + 7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E + 11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0 + 07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08 + 801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027 + 7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A + 450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00 + 305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078 + 99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279 + 99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA + BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225 + EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5 + E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D + 814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9 + 582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35 + 00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380 + 6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000 + 44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64 + 801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E + 3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8 + 21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C + 46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064 + 74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4 + 6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704 + 128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384 + 51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4 + 37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9 + DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853 + E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1 + B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11 + DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867 + 197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA + 0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353 + E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659 + C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD + D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C + 744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48 + AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7 + 53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E + 4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5 + 35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F + 8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B + 4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8 + 6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711 + A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217 + 67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A + DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767 + 1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5 + 9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5 + D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761 + EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43 + 7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65 + F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69 + 0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577 + D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F + C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B + 17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816 + 8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC + 91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD + 31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507 + C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E + 2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39 + B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D + 6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D + 1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF + 66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97 + CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5 + 61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49 + FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D + D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9 + F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B + 625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367 + F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B + E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB + 9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D + DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41 + D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43 + 058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB + AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6 + 1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553 + D0A7FB93199393FF040398F3FC63332DDB0000037E4944415478DAB5956B4814 + 5114C7FFB36EEEBABDD436B7759932821E3ECAB0A2829028E8F165890AFC9298 + 211551585F2C30CAB23765D1CB4F69D193D4D42CCD945EE6AED96E62BA695204 + 5AF6D834132D9D999DEE9DD8A1CB6EB6411DB8730E9C73FFBF33F70C77385996 + F13F8DA3006EDBF34924CE1C69D0A7FC0BD1DEFEEFF9C4652367FA2B2F202F8E + 0F4B090E31FCB5D8FA8410D8DA25CCE383149F7B7F017274566C9756E613C05A + 05109BF144760DE8FEE9D14C7CD388D725C99C0AF8D6DAEAB7D0B523598D2FBB + CEA9717689169956D1EF1E9AA3C6009A0ECDF15B3C50C74117A3C7F9C25C58AD + 56489204A7D3898E8E0E582C16444F9B0283C1408629C0E391D1D53B889A87F7 + 15C85F01F2AE9F41626222445144555515789E87DBED865EAF476CF454E88339 + 683480461B02FA613E78548BD4D4D4C0013BF6A5232D2D0D76BB1D3D3D3DE8EC + EC84FBB31B13A2A2305CAF832C0D82D370883099611A3B16A1A343E17AF90A01 + 03D66C5A8D654B96C2E170A0BBE70BFAFBFAA0D56A214822BABF74210832A441 + 01D3E2E2C19BCD88248BD30E0B1C80AE79D89A138B6164535070309658D729F9 + A6BA5B88B4F078F7B61D2DAD6D58959C8E83599BB160EE7C841B8D8101A8E9CC + 0B814FF73050B014B61527113739920CDC832B9923D5DAE3D531A8B8730FF667 + 2DA8ADBC88F819F17F06783C8050FF138262565C24EBFAAED1D890928286867C + 241D8D41D9ED6A027881FD97DAB1785CCDD000AFB8F7887E7D83C951110AA468 + 4F180328B97917B6672E1CBEFA6EE8CF948A4BE4E17104299DFF6A143089372A + F992EC310CA0A8F80E6A9DCD3856F0E1F700AF383D02A5CBC2C788881887C7B6 + 462C5A9EA08A8B928C5B078C0CE05AC16D7244CD3871C3ED1FE0151F1424459C + AE9BA5760630DE1CAE365079C4C4002E5D2B2380269C2EEDF605D08EBCC3F38A + 8B44A8BCEC0903B09842D59AEA63660670E17229EA1B5DBE8086FDB3FD8A535F + 59FE9401988CA3D4DA07272C0C20EF62319C4D2DBE00C7DE04BFE24A97954E06 + 600C1BA1D6D69CE20303D4ED9EE9575CE9B2BA8101848E32A879DBD90981016A + 77CE80D3D5AE0C9A0E50104432680102B93DFB3E7C55015131260295C8AD2A29 + 57B76C5FCE00366F3FA868F8007EF7C3518A37CE52FCC78FEF9155D8C1E4B698 + 931980263A43CDA9008EE330949557B864DA3DB5ECAC24A6F8F806C873E37FC6 + 14F0A6AD99C90704F8935108F5E9B9F011FA01A02CD0CAC3EA09BB0000000049 + 454E44AE426082} + Name = 'PngImage1' + Background = clWindow end> Left = 232 Top = 16 @@ -47,11 +166,17 @@ object PluginInventario: TPluginInventario Images = LargeImages Left = 40 Top = 72 - object actInventario: TAction + object actInventarioAlmacenes: TAction Category = 'Log'#237'stica' - Caption = 'Inventario' + Caption = 'Inventario almacenes' ImageIndex = 0 - OnExecute = actInventarioExecute + OnExecute = actInventarioAlmacenesExecute + end + object actInventarioObras: TAction + Category = 'Log'#237'stica' + Caption = 'Inventario obras' + ImageIndex = 1 + OnExecute = actInventarioObrasExecute end end object MainMenu: TMainMenu @@ -62,7 +187,11 @@ object PluginInventario: TPluginInventario Caption = 'Log'#237'stica' object Inventario1: TMenuItem Tag = 201 - Action = actInventario + Action = actInventarioAlmacenes + end + object Inventarioobras1: TMenuItem + Tag = 202 + Action = actInventarioObras end end end @@ -86,6 +215,114 @@ object PluginInventario: TPluginInventario 972843D0010013390BFAA171B8130000000049454E44AE426082} Name = 'PngImage0' Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD25200000A4F694343505068 + 6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7 + DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1 + 114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1 + 7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E + 11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0 + 07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08 + 801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027 + 7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A + 450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00 + 305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078 + 99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279 + 99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA + BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225 + EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5 + E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D + 814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9 + 582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35 + 00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380 + 6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000 + 44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64 + 801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E + 3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8 + 21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C + 46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064 + 74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4 + 6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704 + 128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384 + 51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4 + 37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9 + DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853 + E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1 + B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11 + DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867 + 197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA + 0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353 + E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659 + C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD + D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C + 744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48 + AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7 + 53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E + 4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5 + 35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F + 8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B + 4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8 + 6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711 + A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217 + 67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A + DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767 + 1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5 + 9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5 + D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761 + EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43 + 7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65 + F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69 + 0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577 + D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F + C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B + 17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816 + 8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC + 91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD + 31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507 + C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E + 2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39 + B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D + 6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D + 1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF + 66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97 + CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5 + 61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49 + FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D + D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9 + F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B + 625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367 + F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B + E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB + 9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D + DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41 + D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43 + 058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB + AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6 + 1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553 + D0A7FB93199393FF040398F3FC63332DDB0000021C4944415478DAA5D35F4853 + 511C07F0EF316E2B9415697FAC07B382C8FE80084151180441113DD98B0F8938 + 154B0A6C0F850A428E15ACAD62222B7C0C8A0A378649890F1258CBB659C32D73 + 73AEF46EDC6E8A989BD7DD3F79AFECE665348A7E703887C3F97ECE39700E9124 + 09FF534406484B606FD1E26CF85FC36CFE967D0AB0B571482A293FFCC7858D15 + 1BE1F0A6D47E38781AC7CB0611F307A002D4171FA2B75BD450E90D2B8EEE1170 + A898C3149BC6EE224A837A26458CC50B7E03DF1D95E03C04BA831BC0994E4167 + EE475B9B0946E315582C5DD0EB2918EA6A55C06A7B88B7612E3760329BB130BF + 80197A1AC9541282C083883CB6EF2846537D3D9EF50EE406128904ECF61E545D + BC006189C5C0F37B601806573B9DB0DCEFC24F36921B104509CB6961A5F1087A + 7A41C2D578E42AC0F5079FE10F4561EB7EA105E4E26E9E05657AA98C33E1D452 + 1AE31F9CD0C52EA1DBA9C7B5BB9F108A7C83D13A927D82BCB1FD10274AC1B7BB + 94700699F0B9913F5DA3004D777C88C4E2D9805CED1D4FD1DC7C0EEBA9756A78 + 991711F1BBB1295EAB0086CE117CA599DCC0EA1556C3695EC0E4A81B858C4101 + 6A3ADE21CEFCD002B4FD04A8955D33C0DAB03C8E7DECC3B6D90605A86E1D063B + 37A705A66CC7E01A7C8F907706072A76653D673AF81A2737DF52803397FB9439 + 0D203F65B9EA2A77A26788CE024AA800ACE7DFC0D1CFE055B215248F5AF31B09 + F9ABDFF7B8AA4C5A8C1E4183F7891AF8058C8F6E7D811958CE0000000049454E + 44AE426082} + Name = 'PngImage1' + Background = clWindow end> PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] Left = 308 @@ -126,6 +363,134 @@ object PluginInventario: TPluginInventario 000049454E44AE426082} Name = 'PngImage0' Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D494844520000001C0000001C0806000000720DDF + 940000000970485973000017120000171201679FD25200000A4F694343505068 + 6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7 + DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1 + 114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1 + 7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E + 11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0 + 07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08 + 801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027 + 7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A + 450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00 + 305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078 + 99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279 + 99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA + BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225 + EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5 + E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D + 814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9 + 582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35 + 00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380 + 6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000 + 44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64 + 801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E + 3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8 + 21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C + 46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064 + 74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4 + 6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704 + 128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384 + 51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4 + 37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9 + DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853 + E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1 + B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11 + DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867 + 197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA + 0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353 + E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659 + C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD + D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C + 744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48 + AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7 + 53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E + 4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5 + 35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F + 8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B + 4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8 + 6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711 + A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217 + 67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A + DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767 + 1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5 + 9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5 + D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761 + EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43 + 7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65 + F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69 + 0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577 + D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F + C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B + 17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816 + 8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC + 91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD + 31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507 + C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E + 2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39 + B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D + 6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D + 1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF + 66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97 + CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5 + 61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49 + FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D + D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9 + F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B + 625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367 + F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B + E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB + 9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D + DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41 + D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43 + 058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB + AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6 + 1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553 + D0A7FB93199393FF040398F3FC63332DDB000004B04944415478DABDD67B4C53 + 571C07F06FA13C04078C7729B025FE3343E24CF6401797CD2D4360C07C2C716E + 411424D3315444C76002C2D01133064A1C18916A79D95943794D60328A2F3694 + 97E29430E312B7964769850D37E8E3ECDE164EB94241B2E92FB93DE7DE73FAFB + DCF33BF726974708C1D30C1E0BF2783C58EDEE2606A67D6291BBCC64B13FD609 + 374880BFEB7FCA17BFCA0D925B5A0C6A4639FDEBF7C2D1A9B1C23B4E85183DF6 + 0ACF08F2B73512FDB8D672366261E53CF376A447BD85EA1E0D3ADB3B39FD1EC1 + 0914FDF512F22702A12B0A32839E776F3DB9723231B824C00CBAC65F23BD194B + 1FEB8F47BE3942FBBBF6ECE29C3F1AECF8542C49BD6D2EA9DBCEEB64F8E8CBC6 + 81F19F6796CF2ED054BAFDFB0F62EFDE38E8F57A747474A0A1A10A41411110FA + 78C3D9D9190E0E0E4C95B5301808D47F4EE078410E9252B221A9BB8CB446E65A + 49C8ECA05D803DA05E090C35635C1A0CBBAFCE53303A7A13743A1DC4E2B3080C + 5C06954A057B7B7BF83FE70F274707D8DB324FBC1560C55F04F68DFBB6301FCF + BF1886B40603D4A5A10B03939393111B1B8BE2E20A0885AE502A95500DAB98D5 + B9C0E5591738DADB81E827C0B3E2C1D34B002F0F0FB8306325156214F78730E0 + BB0B0323A33623644D30DADBDBA1197980876363E0F3F9D0EA75D03C50C31A04 + FA092D5C5CDD2110FAC24F20800F737474B7A158190C7559D8C24036121276C2 + 866F036B5B5BA4A5651AF74B5454001FA11F147FDCC79DDE3E7C917E88D96703 + B6C56CC2EB2B5E636E6E00C58A355097872F1CD41B0C4C32626C598C4D2CDAB7 + 88F3906D48D7D0F1ECAC143CB3D80622451086CB234CA07B7C1B51E5BF3A2F38 + 1BC6F6C5498ED8BE650BBABA4EE1839C00C8E5174DE3CCA1D5E99177380DD291 + 500C57BC3709C6B512D5B1956690CF743C5673404B187BAD2C653107BCD024A7 + 73D979F29FBA915EF70F86CFAC35811E3B2E93A18255B424F45D94CD8EB1773D + 1D95A43A73C086C6668AB1C7A56B37915EFB378625EB26C18F5BC8D0F1372C96 + 14193573AE507AC085037E5FDF4431B6AC57DB7B18F02103AE37819EB1723278 + E24DF3EA98954D0F7D7A95458C6D2B335D39604DDD0F14D3316D5BD72F385033 + 06D5771B26C198263278F26D0A884B9AE1E9E98D2BAD3790FCF9BA3931F65A55 + 961B07945537508C9DDF7EF30E53A4310C4D815E5B1BC98028C8881998F3D252 + 39053FDBB7764E8C6D6B0F7970C073B27AE33E4F95B5FB761F326423183AB771 + 128CAA2703A7838D189BA4BCBC858289891173625A9D010D87BD38E019691D67 + 0F7B7A7F45A6740883559126D03BB28E28C4A134B1447289820909E114D3E90C + D33073C92EE408386099A486626CB0E0971225066AB74E821F5593DFC56134B1 + F4EC150A7E1A1FCA59E1A3187BAD3957C801C5E555149B02B3CAEFA3FF7CAC09 + F4F9B092DC1585D1C4B2CA560A7E12173227C6B6178FFA714051A98CF3941BC1 + 927BE86FDC61027DD79790DEB28D10497FA4939C6087518C3FD65780FE6A0807 + 4C4CFD7AC69C83A7FAA06C8A378182D5B9A4DFC99D0E9E7EDF97AE30AB73625E + 30CF673307FC6D69D28C3982511514CD09932565C0E983D9D1CB2978B245312F + 98F4C21EAC586EEAB3E0B83066D67914E4FD0F1FC079DB61BCE9DD85B0988C7E + 083FCDF817B51A2205660D9F400000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow end> Left = 232 Top = 80 diff --git a/Source/Modulos/Inventario/Plugin/uPluginInventario.pas b/Source/Modulos/Inventario/Plugin/uPluginInventario.pas index 6109c92c..8ff11c41 100644 --- a/Source/Modulos/Inventario/Plugin/uPluginInventario.pas +++ b/Source/Modulos/Inventario/Plugin/uPluginInventario.pas @@ -12,7 +12,7 @@ type end; TPluginInventario = class(TModuleController, IMCInventario) - actInventario: TAction; + actInventarioAlmacenes: TAction; ExtraImages: TPngImageList; LargeImages: TPngImageList; MainMenu: TMainMenu; @@ -20,7 +20,10 @@ type SmallImages: TPngImageList; Logstica1: TMenuItem; Inventario1: TMenuItem; - procedure actInventarioExecute(Sender: TObject); + actInventarioObras: TAction; + Inventarioobras1: TMenuItem; + procedure actInventarioAlmacenesExecute(Sender: TObject); + procedure actInventarioObrasExecute(Sender: TObject); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -42,15 +45,26 @@ end; exports GetModule name GET_MODULE_FUNC; -procedure TPluginInventario.actInventarioExecute(Sender: TObject); +procedure TPluginInventario.actInventarioAlmacenesExecute(Sender: TObject); var AInventarioController : IInventarioController; AInventario : IBizInventario; begin AInventarioController := TInventarioController.Create; - AInventario := (AInventarioController.BuscarTodos as IBizInventario); - AInventarioController.VerTodos(AInventario); + AInventario := (AInventarioController.BuscarTodosAlmacenes as IBizInventario); + AInventarioController.VerTodos(AInventario, CTE_INV_ALMACEN); +end; + +procedure TPluginInventario.actInventarioObrasExecute(Sender: TObject); +var + AInventarioController : IInventarioController; + AInventario : IBizInventario; + +begin + AInventarioController := TInventarioController.Create; + AInventario := (AInventarioController.BuscarTodosObras as IBizInventario); + AInventarioController.VerTodos(AInventario, CTE_INV_OBRA); end; constructor TPluginInventario.Create(AOwner: TComponent); diff --git a/Source/Modulos/Inventario/Servidor/srvInventario_Impl.dfm b/Source/Modulos/Inventario/Servidor/srvInventario_Impl.dfm index 529d9398..6525665b 100644 --- a/Source/Modulos/Inventario/Servidor/srvInventario_Impl.dfm +++ b/Source/Modulos/Inventario/Servidor/srvInventario_Impl.dfm @@ -23,14 +23,14 @@ object srvInventario: TsrvInventario 'A, REFERENCIA, FAMILIA,'#10' DESCRIPCION,'#10'/* REFERENCIA_PROV a' + 's REFERENCIA_PROVEEDOR, PRECIO_NETO, COSTE_UNIDADES, SE ELIMINA' + 'N LOS PRECIOS CON HASTA SABER QUE DECISIONES SE TOMAN*/'#10' STOC' + - 'K, UNIDADES_ALMACEN, RESERVA, PENDIENTE_RECEPCION,'#10' '#10' /*'#10' ' + - ' NO BORRAR YA QUE SIRVE PARA LAS ENTRADAS Y SALIDAS DE ALMACEN' + - '(TABLA MOVIMIENTOS)'#10' DEBERIA GENERAR UNA TABLA DE MOVIMIENTOS' + - ' INDEPENDIENTE DEL INVENTARIO PERO POR FALTA'#10' DE TIEMPO Y FIA' + - 'BILIDAD YA QUE AHORA FUNCIONA TODO, CREAMOS ESTOS CAMPOS FICTICI' + - 'OS'#10' */'#10#10' 0 as ID, 0 as CANTIDAD, current_date as FECHA_MOV' + - 'IMIENTO, NULL as CAUSA, NULL as TIPO'#10#10#10'FROM V_INVENTARIO'#10'where {' + - 'where}'#10'ORDER BY ID_ARTICULO'#10 + 'K, UNIDADES_ALMACEN, RESERVA, PENDIENTE_RECEPCION, TIPO_ALMACEN,' + + #10' '#10' /*'#10' NO BORRAR YA QUE SIRVE PARA LAS ENTRADAS Y SALI' + + 'DAS DE ALMACEN(TABLA MOVIMIENTOS)'#10' DEBERIA GENERAR UNA TABLA ' + + 'DE MOVIMIENTOS INDEPENDIENTE DEL INVENTARIO PERO POR FALTA'#10' D' + + 'E TIEMPO Y FIABILIDAD YA QUE AHORA FUNCIONA TODO, CREAMOS ESTOS ' + + 'CAMPOS FICTICIOS'#10' */'#10#10' 0 as ID, 0 as CANTIDAD, current_dat' + + 'e as FECHA_MOVIMIENTO, NULL as CAUSA, NULL as TIPO'#10#10#10'FROM V_INVE' + + 'NTARIO'#10'where {where}'#10'ORDER BY ID_ARTICULO'#10 StatementType = stSQL ColumnMappings = < item @@ -49,6 +49,10 @@ object srvInventario: TsrvInventario DatasetField = 'ID_EMPRESA' TableField = 'ID_EMPRESA' end + item + DatasetField = 'REFERENCIA' + TableField = 'REFERENCIA' + end item DatasetField = 'FAMILIA' TableField = 'FAMILIA' @@ -61,6 +65,10 @@ object srvInventario: TsrvInventario DatasetField = 'STOCK' TableField = 'STOCK' end + item + DatasetField = 'UNIDADES_ALMACEN' + TableField = 'UNIDADES_ALMACEN' + end item DatasetField = 'RESERVA' TableField = 'RESERVA' @@ -69,6 +77,10 @@ object srvInventario: TsrvInventario DatasetField = 'PENDIENTE_RECEPCION' TableField = 'PENDIENTE_RECEPCION' end + item + DatasetField = 'ID' + TableField = 'ID' + end item DatasetField = 'CANTIDAD' TableField = 'CANTIDAD' @@ -86,12 +98,8 @@ object srvInventario: TsrvInventario TableField = 'TIPO' end item - DatasetField = 'REFERENCIA' - TableField = 'REFERENCIA' - end - item - DatasetField = 'UNIDADES_ALMACEN' - TableField = 'UNIDADES_ALMACEN' + DatasetField = 'TIPO_ALMACEN' + TableField = 'TIPO_ALMACEN' end> end> Name = 'Inventario' @@ -155,12 +163,16 @@ object srvInventario: TsrvInventario DataType = datLargeInt DictionaryEntry = 'INVENTARIO_PENDIENTE_RECEPCION' end + item + Name = 'TIPO_ALMACEN' + DataType = datString + Size = 10 + end item Name = 'ID' DataType = datInteger DictionaryEntry = 'INVENTARIO_ID' InPrimaryKey = True - Calculated = True end item Name = 'CANTIDAD' diff --git a/Source/Modulos/Inventario/Views/Inventario_view.dpk b/Source/Modulos/Inventario/Views/Inventario_view.dpk index 92ff94f4..fa19fd7d 100644 Binary files a/Source/Modulos/Inventario/Views/Inventario_view.dpk and b/Source/Modulos/Inventario/Views/Inventario_view.dpk differ diff --git a/Source/Modulos/Inventario/Views/Inventario_view.dproj b/Source/Modulos/Inventario/Views/Inventario_view.dproj index e9643bc1..c6dfc324 100644 --- a/Source/Modulos/Inventario/Views/Inventario_view.dproj +++ b/Source/Modulos/Inventario/Views/Inventario_view.dproj @@ -39,17 +39,18 @@ Delphi.Personality Package -FalseTrueFalseTrueFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Inventario_view.dpk +FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Inventario_view.dpk
MainSource - - - - + + + + +
fEditorDetalleReservas
TfEditorDetalleReservas @@ -91,7 +92,7 @@