{ =============================================================================== Copyright (©) 2001. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: 01-10-2001 Versión actual: 1.1.0 Fecha versión actual: 06-03-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 12-11-2001 Se ha añadido el procedimiento para inicializar el grid de localizar artículos. 27-11-2001 Se ha añadido la funcion esAlmacen. 18-01-2002 Ordenar por descripción el grid de almacenes. 01-02-2002 Repaso de orden por descripcion. 24-02-2002 Los procedimientos darAlmacenes, darAlmacenesFisicos y darAlmacenesObras han sido modificados, ahora los parametros que se le pasan por parametros se limpian por si contienen previamente algo. 07-04-2002 Cambio de todos los procedimientos en los que se utiliza una transaccion nueva, por una unica transacción. Se ha eliminado el procedomiento sobrecargado ExisteAlmacen que utilizaba una transaccion pasada por parametro. 27-05-2002 Cambio a un objeto contador (TContadorAlmacen) 16-11-2002 p250. Poner el número total de almacenes dados de alta en la inicialización del grid. 06-03-2004 P272. Adaptación a multiempresa. =============================================================================== } unit TablaAlmacenes; interface uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, DBTables, DB, IBCustomDataSet, IBSQL, BaseDatos, IBDatabase, dxDBGrid, dxDBCtrl, dbgrids, StrFunc, Mensajes, IB, Contadores, dxDBTLCL; type TDatosAlmacen = class(TPersistent) public CodigoEmpresa : Integer; Tipo : String; Codigo : Integer; Nombre : String; Calle : String; Numero : String; Piso : String; CodigoPostal : String; Poblacion : String; Provincia : String; Telefono : String; PersonaContacto : String; CodigoCliente : String; end; type TdmTablaAlmacenes = class(TDataModule) private procedure IniciarSQL; public sqlInsertarFisicos : TStrings; sqlInsertarObras : TStrings; sqlModificar : TStrings; sqlConsultar : TStrings; sqlEliminar : TStrings; sqlGrid : TStrings; sqlGridFisicos : TStrings; sqlGridObras : TStrings; sqlLocalizarGrid : TStrings; sqlInsertarPresupuesto : TStrings; sqlModificarPresupuesto : TStrings; sqlConsultarPresupuesto : TStrings; sqlEliminarPresupuesto : TStrings; constructor Create (AOwner : TComponent); override; destructor Destroy; override; //Metodos que llamaran a contador function DarNuevoCodigo : Variant; function IncrementarCodigo: boolean; function InsertarContador: boolean; function ValidarCodigo(Codigo : Variant) : Boolean; function ExisteAlmacen(CodigoEmpresa: Integer; CodigoAlmacen : Variant) : Boolean; overload; function DarDatosAlmacen(var Datos : TDatosAlmacen) : Boolean; function EsAlmacen(CodigoEmpresa: Integer; CodigoAlmacen : Integer) : Boolean; procedure InicializarGridAlmacenes(var Grid: TdxDBGrid); procedure InicializarGridLocalizar(var Grid: TdxDBGrid); procedure InicializarGridDetallesPresupuestos(var Grid: TdxDBGrid); function DarAlmacenes(CodigoEmpresa: Integer): TStrings; overload; procedure DarAlmacenes(CodigoEmpresa: Integer; var AlmacenCodigo, CodigoAlmacen : TStringList); overload; procedure DarAlmacenesFisicos(CodigoEmpresa: Integer; var AlmacenCodigo, CodigoAlmacen : TStringList); procedure DarAlmacenesObras(CodigoEmpresa: Integer; var AlmacenCodigo, CodigoAlmacen : TStringList); function HayExistenciasEnAlmacen(CodigoEmpresa: Integer; CodigoAlmacen : Integer):Boolean; function ExistePresupuestoEnObra(CodigoPresupuesto: Variant): Boolean; end; var dmTablaAlmacenes: TdmTablaAlmacenes; implementation {$R *.DFM} uses Excepciones, RdxGestorContadores, RdxEmpresaActiva; constructor TdmTablaAlmacenes.Create (AOwner : TComponent); begin inherited; sqlInsertarFisicos := TStringList.Create; sqlInsertarObras := TStringList.Create; sqlModificar := TStringList.Create; sqlConsultar := TStringList.Create; sqlEliminar := TStringList.Create; sqlGrid := TStringList.Create; sqlGridFisicos := TStringList.Create; sqlGridObras := TStringList.Create; sqlLocalizarGrid := TStringList.Create; sqlInsertarPresupuesto := TStringList.Create; sqlModificarPresupuesto := TStringList.Create; sqlConsultarPresupuesto := TStringList.Create; sqlEliminarPresupuesto := TStringList.Create; IniciarSQL; end; destructor TdmTablaAlmacenes.Destroy; begin sqlInsertarFisicos.Free; sqlInsertarObras.Free; sqlModificar.Free; sqlConsultar.Free; sqlEliminar.Free; sqlGrid.Free; sqlGridFisicos.Free; sqlGridObras.Free; sqlLocalizarGrid.Free; sqlInsertarPresupuesto.Free; sqlModificarPresupuesto.Free; sqlConsultarPresupuesto.Free; sqlEliminarPresupuesto.Free; inherited; end; procedure TdmTablaAlmacenes.IniciarSQL; begin with sqlInsertarFisicos do begin Add('insert into ALMACENES '); Add('(CODIGOEMPRESA, TIPO, CODIGO, NOMBRE, CALLE, NUMERO, PISO, '); Add('CODIGOPOSTAL, POBLACION, PROVINCIA, TELEFONO, '); Add('PERSONACONTACTO, CODIGOCLIENTE) '); Add('values (:CODIGOEMPRESA, ''F'', :CODIGO, :NOMBRE, :CALLE, :NUMERO, :PISO, '); Add(':CODIGOPOSTAL, :POBLACION, :PROVINCIA, :TELEFONO, '); Add(':PERSONACONTACTO, :CODIGOCLIENTE)'); end; with sqlInsertarObras do begin Add('insert into ALMACENES '); Add('(CODIGOEMPRESA, TIPO, CODIGO, NOMBRE, CALLE, NUMERO, PISO, '); Add('CODIGOPOSTAL, POBLACION, PROVINCIA, TELEFONO, '); Add('PERSONACONTACTO, CODIGOCLIENTE) '); Add('values (:CODIGOEMPRESA, ''O'', :CODIGO, :NOMBRE, :CALLE, :NUMERO, :PISO, '); Add(':CODIGOPOSTAL, :POBLACION, :PROVINCIA, :TELEFONO, '); Add(':PERSONACONTACTO, :CODIGOCLIENTE)'); end; with sqlModificar do begin Add('update ALMACENES set '); Add('NOMBRE = :NOMBRE, '); Add('CALLE = :CALLE, '); Add('NUMERO = :NUMERO, '); Add('PISO = :PISO, '); Add('CODIGOPOSTAL = :CODIGOPOSTAL, '); Add('POBLACION = :POBLACION, '); Add('PROVINCIA = :PROVINCIA, '); Add('TELEFONO = :TELEFONO, '); Add('PERSONACONTACTO = :PERSONACONTACTO, '); Add('CODIGOCLIENTE = :CODIGOCLIENTE '); Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA)'); end; with sqlEliminar do begin Add('delete from ALMACENES '); Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA)'); end; with sqlConsultar do begin Add('select ALMACENES.*, CLIENTES.NOMBRE NOMBRECLIENTE, CLIENTES.NIFCIF NIFCIF '); Add('from ALMACENES, CLIENTES '); Add('where (ALMACENES.CODIGO = :CODIGO) and '); Add('(ALMACENES.CODIGOEMPRESA = :CODIGOEMPRESA) and '); Add('(ALMACENES.CODIGOCLIENTE = CLIENTES.CODIGO) '); Add('union '); Add('select ALMACENES.*, cast('''' as varchar(100)), cast('''' as varchar(10)) '); Add('from ALMACENES '); Add('where (ALMACENES.CODIGO = :CODIGO) and '); Add('(ALMACENES.CODIGOEMPRESA = :CODIGOEMPRESA) and '); Add('(CODIGOCLIENTE is null)'); end; with sqlGrid do begin Add('select ALMACENES.CODIGO as "ALMACENES.CODIGO", '); Add('ALMACENES.NOMBRE as "ALMACENES.NOMBRE", TELEFONO, '); Add('ALMACENES.PERSONACONTACTO as "ALMACENES.PERSONACONTACTO", '); Add('CLIENTES.CODIGO as "CLIENTES.CODIGO", '); Add('CLIENTES.NOMBRE AS "CLIENTES.NOMBRE", NIFCIF '); Add('from ALMACENES left join CLIENTES '); Add('on ALMACENES.CODIGOCLIENTE = CLIENTES.CODIGO '); Add('where (ALMACENES.CODIGOEMPRESA = :CODIGOEMPRESA)'); Add('order by ALMACENES.NOMBRE'); end; with sqlGridFisicos do begin Add('select ALMACENES.CODIGO as "ALMACENES.CODIGO", '); Add('ALMACENES.NOMBRE as "ALMACENES.NOMBRE", TELEFONO, '); Add('ALMACENES.PERSONACONTACTO as "ALMACENES.PERSONACONTACTO", '); Add('CLIENTES.CODIGO as "CLIENTES.CODIGO", '); Add('CLIENTES.NOMBRE AS "CLIENTES.NOMBRE", NIFCIF '); Add('from ALMACENES left join CLIENTES '); Add('on ALMACENES.CODIGOCLIENTE = CLIENTES.CODIGO '); Add('where (ALMACENES.TIPO = ''F'') and (ALMACENES.CODIGOEMPRESA = :CODIGOEMPRESA)'); Add('order by ALMACENES.NOMBRE'); end; with sqlGridObras do begin Add('select ALMACENES.CODIGO as "ALMACENES.CODIGO", '); Add('ALMACENES.NOMBRE as "ALMACENES.NOMBRE", TELEFONO, '); Add('ALMACENES.PERSONACONTACTO as "ALMACENES.PERSONACONTACTO", '); Add('CLIENTES.CODIGO as "CLIENTES.CODIGO", '); Add('CLIENTES.NOMBRE AS "CLIENTES.NOMBRE", NIFCIF '); Add('from ALMACENES left join CLIENTES '); Add('on (ALMACENES.CODIGOCLIENTE = CLIENTES.CODIGO) '); Add('where (TIPO = ''O'') and (ALMACENES.CODIGOEMPRESA = :CODIGOEMPRESA)'); Add('order by ALMACENES.NOMBRE'); end; with sqlLocalizarGrid do begin Add('select AL.CODIGO, AL.NOMBRE, AL.CALLE, EA.EXISTENCIAS '); Add('from ALMACENES AL, ESTADOALMACEN EA '); Add('where (AL.CODIGOEMPRESA = :CODIGOEMPRESA) '); Add('and (EA.CODIGOEMPRESA = AL.CODIGOEMPRESA) '); Add('and (EA.CODIGOARTICULO = :CODIGOARTICULO) '); Add('and AL.CODIGO in (select EA2.CODIGOALMACEN '); Add('from ESTADOALMACEN EA2 '); Add('where (EA2.CODIGOARTICULO = EA.CODIGOARTICULO) and '); Add('(EA2.CODIGOEMPRESA = EA.CODIGOEMPRESA)) '); Add('and (EA.CODIGOALMACEN = AL.CODIGO) '); Add('order by AL.NOMBRE '); end; with sqlInsertarPresupuesto do begin Add('insert into OBRASPRESUPUESTOS '); Add('(CODIGOEMPRESA, CODIGOALMACEN, CODIGOPRESUPUESTO) '); Add('values (:CODIGOEMPRESA, :CODIGOALMACEN, :CODIGOPRESUPUESTO) '); end; with sqlModificarPresupuesto do begin Add('update OBRASPRESUPUESTOS set'); Add('CODIGOEMPRESA = :CODIGOEMPRESA,'); Add('CODIGOALMACEN = :CODIGOALMACEN,'); Add('CODIGOPRESUPUESTO = :CODIGOPRESUPUESTO'); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)'); Add('and (CODIGOALMACEN = :CODIGOALMACEN)'); Add('and (CODIGOPRESUPUESTO = :CODIGOPRESUPUESTO)'); end; with sqlConsultarPresupuesto do begin Add('select * from OBRASPRESUPUESTOS '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)'); Add('and (CODIGOALMACEN = :CODIGOALMACEN)'); end; with sqlEliminarPresupuesto do begin Add('delete from OBRASPRESUPUESTOS '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)'); Add('and (CODIGOALMACEN = :CODIGOALMACEN)'); Add('and (CODIGOPRESUPUESTO = :CODIGOPRESUPUESTO)'); end; end; function TdmTablaAlmacenes.DarNuevoCodigo : Variant; begin Result := GestorContadores.DarNuevoCodigo(contAlmacenes); end; function TdmTablaAlmacenes.IncrementarCodigo: boolean; begin Result := GestorContadores.IncrementarValor(contAlmacenes); end; function TdmTablaAlmacenes.validarCodigo(Codigo : Variant) : Boolean; begin Result := GestorContadores.ValidarCodigo(contAlmacenes, Codigo); end; function TdmTablaAlmacenes.InsertarContador: boolean; begin Result := GestorContadores.InsertarContador(contAlmacenes); end; function TdmTablaAlmacenes.ExisteAlmacen(CodigoEmpresa: Integer; CodigoAlmacen: Variant): Boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO '); SQL.Add('from ALMACENES '); SQL.Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA) '); ParamByName('CODIGO').AsInteger := CodigoAlmacen; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; if (RecordCount > 0) then Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaAlmacenes.DarDatosAlmacen(var Datos: TDatosAlmacen): Boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * from ALMACENES '); SQL.Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA) '); ParamByName('CODIGO').AsInteger := Datos.Codigo; ParamByName('CODIGOEMPRESA').AsInteger := Datos.CodigoEmpresa; try Prepare; ExecQuery; if (RecordCount > 0) then begin with Datos do begin Tipo := FieldByName('TIPO').AsString; Nombre := FieldByName('NOMBRE').AsString; Calle := FieldByName('CALLE').AsString; Numero := FieldByName('NUMERO').AsString; Piso := FieldByName('PISO').AsString; CodigoPostal := FieldByName('CODIGOPOSTAL').AsString; Poblacion := FieldByName('POBLACION').AsString; Provincia := FieldByName('PROVINCIA').AsString; Telefono := FieldByName('TELEFONO').AsString; PersonaContacto := FieldByName('PERSONACONTACTO').AsString; CodigoCliente := FieldByName('CODIGOCLIENTE').AsString; Result := True; end; end; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaAlmacenes.InicializarGridAlmacenes(var Grid: TdxDBGrid); var Columna : TdxDBTreeListColumn; begin with Grid do begin DestroyColumns; ShowSummaryFooter := True; {Columna CODIGO} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'ALMACENES.CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo2; Columna.SummaryFooterType := cstCount; Columna.SummaryFooterFormat := 'Total: 0 almacenes'; {Columna NOMBRE} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'ALMACENES.NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColDescripcion3; {Columna TELEFONO} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'TELEFONO'; Columna.Caption := 'Teléfono'; Columna.Width := tamColTelefono; {Columna PERSONACONTACTO} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'ALMACENES.PERSONACONTACTO'; Columna.Caption := 'Persona de contacto'; Columna.Width := tamColDescripcion3; {Columna CODIGOCLIENTE} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'CODIGOCLIENTE'; Columna.Visible := False; {Columna NOMBRECLIENTE} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'CLIENTES.NOMBRE'; Columna.Caption := 'Cliente asociado'; Columna.Width := tamColDescripcion3; {Columna NIFCIF} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'NIFCIF'; Columna.Visible := False; end; end; procedure TdmTablaAlmacenes.DarAlmacenes(CodigoEmpresa: Integer; var AlmacenCodigo, CodigoAlmacen : TStringList); var oSQL : TIBSQL; begin if (AlmacenCodigo = nil) or (CodigoAlmacen = nil) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO, NOMBRE from ALMACENES'); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('order by NOMBRE'); ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; //Limpiamos los valores que tubieran antes AlmacenCodigo.Clear; CodigoAlmacen.Clear; while not EOF do begin AlmacenCodigo.Values[FieldByName('NOMBRE').AsString] := FieldByName('CODIGO').AsString; CodigoAlmacen.Values[FieldByName('CODIGO').AsString] := FieldByName('NOMBRE').AsString; Next; end; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaAlmacenes.DarAlmacenesFisicos (CodigoEmpresa: Integer; var AlmacenCodigo, CodigoAlmacen : TStringList); var oSQL : TIBSQL; begin if (AlmacenCodigo = nil) or (CodigoAlmacen = nil) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO, NOMBRE from ALMACENES'); SQL.Add('where (TIPO = ''F'') '); SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('order by NOMBRE'); ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; //Limpiamos los valores que tubieran antes AlmacenCodigo.Clear; CodigoAlmacen.Clear; while not EOF do begin AlmacenCodigo.Values[FieldByName('NOMBRE').AsString] := FieldByName('CODIGO').AsString; CodigoAlmacen.Values[FieldByName('CODIGO').AsString] := FieldByName('NOMBRE').AsString; Next; end; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaAlmacenes.darAlmacenesObras (CodigoEmpresa: Integer; var AlmacenCodigo, CodigoAlmacen : TStringList); var oSQL : TIBSQL; begin if (AlmacenCodigo = nil) or (CodigoAlmacen = nil) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO, NOMBRE from ALMACENES'); SQL.Add('where (TIPO = ''O'') '); SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('order by NOMBRE'); ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; //Limpiamos los valores que tubieran antes AlmacenCodigo.Clear; CodigoAlmacen.Clear; while not EOF do begin AlmacenCodigo.Values[FieldByName('NOMBRE').AsString] := FieldByName('CODIGO').AsString; CodigoAlmacen.Values[FieldByName('CODIGO').AsString] := FieldByName('NOMBRE').AsString; Next; end; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaAlmacenes.DarAlmacenes(CodigoEmpresa: Integer): TStrings; var oSQL : TIBSQL; Lista : TStringList; begin Lista := TStringList.Create; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select NOMBRE from ALMACENES'); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('order by NOMBRE'); ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; while not EOF do begin Lista.Add(Fields[0].AsString); Next; end; result := Lista; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaAlmacenes.HayExistenciasEnAlmacen(CodigoEmpresa: Integer; CodigoAlmacen: Integer): Boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select sum(EXISTENCIAS) '); SQL.Add('from ESTADOALMACEN '); SQL.Add('where (CODIGOALMACEN = :CODIGOALMACEN) '); SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('group by CODIGOALMACEN '); ParamByName('CODIGOALMACEN').AsInteger := CodigoAlmacen; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; if RecordCount <> 0 then if Fields[0].AsString <> '0' then Result := True; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaAlmacenes.InicializarGridLocalizar(var Grid: TdxDBGrid); var Columna : TdxDBTreeListColumn; begin with Grid do begin DestroyColumns; {Columna CODIGO} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'CODIGO'; Columna.Caption := 'Cód. almacén/obra'; Columna.Width := 65; {Columna NOMBRE} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre de almacén/obra'; Columna.Width := 150; {Columna CALLE} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'CALLE'; Columna.Caption := 'Calle'; Columna.Width := 150; {Columna EXISTENCIAS} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'EXISTENCIAS'; Columna.Caption := 'Existencias'; Columna.Width := 65; end; end; function TdmTablaAlmacenes.EsAlmacen(CodigoEmpresa: Integer; CodigoAlmacen: Integer): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(CodigoAlmacen) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * from ALMACENES '); SQL.Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('and (TIPO = ''F'') '); ParamByName('CODIGO').AsInteger := CodigoAlmacen; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; if (RecordCount > 0) then Result := True; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaAlmacenes.InicializarGridDetallesPresupuestos( var Grid: TdxDBGrid); var Columna : TdxDBTreeListColumn; begin with Grid do begin DestroyColumns; {Columna CODIGOEMPRESA} Columna := CreateColumn(TdxDBTreeListColumn); Columna.Visible := False; Columna.FieldName := 'CODIGOEMPRESA'; {Columna CODIGOALMACEN} Columna := CreateColumn(TdxDBTreeListColumn); Columna.Visible := False; Columna.FieldName := 'CODIGOALMACEN'; {Columna CODIGOPRESUPUESTO} Columna := CreateColumn(TdxDBTreeListButtonColumn); Columna.FieldName := 'CODIGOPRESUPUESTO'; Columna.Caption := 'Cód. presupuesto'; Columna.Width := tamColCodigo; Columna.ReadOnly := True; end; end; function TdmTablaAlmacenes.ExistePresupuestoEnObra( CodigoPresupuesto: Variant): Boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGOALMACEN '); SQL.Add('from OBRASPRESUPUESTOS '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('and CODIGOPRESUPUESTO = :CODIGOPRESUPUESTO '); try ParamByName('CODIGOEMPRESA').AsString := EmpresaActiva.Codigo; ParamByName('CODIGOPRESUPUESTO').AsString := CodigoPresupuesto; Prepare; ExecQuery; Result := RecordCount <> 0; finally Close; Transaction := NIL; Free; end; end; end; end.