This repository has been archived on 2024-11-29. You can view files and clone it, but cannot push or open issues or pull requests.
Tecsitel_FactuGES/BaseDatos/TablaArticulosObraHistorica.pas

951 lines
30 KiB
ObjectPascal
Raw Permalink Normal View History

{
===============================================================================
Copyright (<EFBFBD>) 2001. Rodax Software.
===============================================================================
Los contenidos de este fichero son propiedad de Rodax Software titular del
copyright. Este fichero s<EFBFBD>lo podr<EFBFBD> ser copiado, distribuido y utilizado,
en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
acuerdo con los t<EFBFBD>rminos y condiciones establecidas en el acuerdo/contrato
bajo el que se suministra.
-----------------------------------------------------------------------------
Web: www.rodax-software.com
===============================================================================
Fecha primera versi<EFBFBD>n: 11-08-2002
Versi<EFBFBD>n actual: 1.0.3
Fecha versi<EFBFBD>n actual: 12-10-2004
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
16-11-2002 p250. Poner el n<EFBFBD>mero total de art<EFBFBD>culos dados de alta
en la inicializaci<EFBFBD>n del grid.
14-04-2004 p272. Adaptaci<EFBFBD>n a multiempresa.
12-10-2004 p290. Precio de coste de obra
===============================================================================
}
unit TablaArticulosObraHistorica;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms,
Dialogs, DBTables, DB, IBCustomDataSet, IBSQL, BaseDatos, IBDatabase,
IBStoredProc, Mensajes, IB, dxDBGrid, dxDBCtrl, dbgrids, Tipos,
//TablaArticulos es usada por el Tipo TDatosArticulo, TDatosAlmacen, TDatosMovimiento
TablaArticulos, TablaAlmacenes, TablaMovimientos;
type
TDatosObraCerrada = class(TPersistent)
public
CodigoEmpresa : Integer;
Codigo : Integer;
FechaCierre : String;
Nombre : String;
Calle : String;
Numero : String;
Piso : String;
CodigoPostal : String;
Poblacion : String;
Provincia : String;
Telefono : String;
PersonaContacto : String;
end;
TDatosMaterial = class(TPersistent)
public
CodigoObra : Integer;
FechaCierre : String;
CodigoArticulo : String;
Familia : String;
Descripcion : String;
Unidadesmedida : String;
Existencias : String;
Observaciones : String;
end;
TdmTablaArticulosObraHistorica = class(TDataModule)
private
procedure IniciarSQL;
function existeArticuloEnAlmacen(CodigoEmpresa: Integer; CodigoArticulo: String): Boolean;
public
sqlConsultar : TStrings;
sqlEliminar : TStrings;
sqlGrid : TStrings;
sqlGridObrasCerradas : TStrings;
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
function ValidarCodigo(Codigo : String) : Boolean;
function FormatearCodigo(var Codigo : String) : String;
function ExisteArticulo(CodigoEmpresa: Integer; Material : TDatosMaterial) : Boolean;
function DarDatosObraCerrada(CodigoEmpresa: Integer; Codigo: Variant) : TDatosObraCerrada; overload;
function DarDatosMaterial(CodigoEmpresa: Integer; var Datos: TDatosMaterial): Boolean;
function ArticuloAlmacenTieneExistencias(CodigoEmpresa, CodigoAlmacen: Integer;
CodigoArticulo: String): Boolean;
function ExisteArticuloAlmacen(CodigoEmpresa, CodigoAlmacen: Integer;
CodigoArticulo: String): Boolean;
function DarDatosArticuloAlmacen(CodigoEmpresa: Integer; var Datos: TDatosArticulo): Boolean;
function DarListaArticulos(Grid : TdxDBGrid; Tabla: TPTabla) : TStringList;
function InsertarObraHistorica(CodigoEmpresa, CodigoAlmacen:Integer;
Fecha: String): Boolean;
function InsertarPresupuestosObraHistorica(CodigoEmpresa, CodigoAlmacen: Integer; Fecha: String): Boolean;
function EliminarPresupuestosObra(CodigoEmpresa, CodigoAlmacen: Integer): Boolean;
function InsertarArticulosObraHistorica(CodigoEmpresa, CodigoAlmacen: Integer; Fecha: String): Boolean;
procedure InicializarTablaArticulosObraHistorica(Tabla : TPTabla);
procedure InicializarGridArticulosObraHistorica(var Grid: TdxDBGrid);
procedure InicializarGridObrasCerradas(var Grid: TdxDBGrid);
function DarObras(CodigoEmpresa: Integer): TStringList;
function DarArticuloMin(CodigoEmpresa: Integer; CodigoObra: Integer; FechaCierre: String): String;
function DarArticuloMax(CodigoEmpresa: Integer; CodigoObra: Integer; FechaCierre: String): String;
end;
var
dmTablaArticulosObraHistorica: TdmTablaArticulosObraHistorica;
implementation
{$R *.DFM}
uses
Excepciones, IBErrorCodes, RdxEmpresaActiva, Literales, DateFunc, StrFunc, Constantes;
{ TdmTablaArticulosObraHistorica }
constructor TdmTablaArticulosObraHistorica.Create (AOwner : TComponent);
begin
inherited;
sqlConsultar := TStringList.Create;
sqlEliminar := TStringList.Create;
sqlGrid := TStringList.Create;
sqlGridObrasCerradas := TStringList.Create;
IniciarSQL;
end;
destructor TdmTablaArticulosObraHistorica.Destroy;
begin
sqlConsultar.Free;
sqlEliminar.Free;
sqlGrid.Free;
sqlGridObrasCerradas.Free;
inherited;
end;
procedure TdmTablaArticulosObraHistorica.IniciarSQL;
begin
with sqlConsultar do
begin
Add('select CODIGO, NOMBRE, OBRASHISTORICAS.FECHACIERRE, CODIGOARTICULO, ');
Add('FAMILIA, DESCRIPCION, UNIDADESMEDIDA, OBSERVACIONES, EXISTENCIAS ');
Add('from OBRASHISTORICAS, ESTADOOBRASHISTORICAS ');
Add('where (OBRASHISTORICAS.CODIGO = :CODIGOOBRA) and ');
Add('(OBRASHISTORICAS.FECHACIERRE = :FECHACIERRE) and ');
Add('(OBRASHISTORICAS.CODIGOEMPRESA = :CODIGOEMPRESA) and ');
Add('(ESTADOOBRASHISTORICAS.CODIGOOBRA = OBRASHISTORICAS.CODIGO) and ');
Add('(ESTADOOBRASHISTORICAS.CODIGOEMPRESA = OBRASHISTORICAS.CODIGOEMPRESA) and ');
Add('(ESTADOOBRASHISTORICAS.FECHACIERRE = OBRASHISTORICAS.FECHACIERRE) and ');
Add('(ESTADOOBRASHISTORICAS.CODIGOARTICULO = :CODIGOARTICULO) ');
end;
with sqlEliminar do
begin
Add('delete from ESTADOOBRASHISTORICAS ');
Add('where (CODIGOOBRA = :CODIGOOBRA) ');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
Add('and (FECHACIERRE = :FECHACIERRE) ');
Add('and (CODIGOARTICULO = :CODIGOARTICULO) ');
end;
with sqlGrid do
begin
Add('select CODIGOOBRA, FECHACIERRE, CODIGOARTICULO, FAMILIA, DESCRIPCION, ');
Add('UNIDADESMEDIDA, EXISTENCIAS, (PRECIORECEPCION * EXISTENCIAS) as TOTAL ');
Add('from ESTADOOBRASHISTORICAS ');
Add('where (CODIGOOBRA = :CODIGOOBRA) ');
Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
Add('and (FECHACIERRE = :FECHACIERRE) ');
Add('order by DESCRIPCION');
end;
with sqlGridObrasCerradas do
begin
Add('select CODIGOEMPRESA, CODIGO as "ALMACENES.CODIGO", FECHACIERRE, NOMBRE as "ALMACENES.NOMBRE",');
Add('TELEFONO, PERSONACONTACTO ');
Add('from OBRASHISTORICAS ');
Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) ');
Add('order by NOMBRE');
end;
end;
{ Tanto ExisteArticulosAlmacen como DarDatosArticuloAlmacen esta bien que
tengan su propia transaccion ya que se hace una consulta en un momento
determinado, sin dependencia de otras operaciones}
function TdmTablaArticulosObraHistorica.existeArticuloAlmacen(CodigoEmpresa,
CodigoAlmacen: Integer; CodigoArticulo: String): Boolean;
{Comprueba si existe un articulo en un determinado almacen, pasandole por
parametro el codigo de articulo y el del almacen, devuelve true o false
dependiendo si existe o no}
var
oSQL : TIBSQL;
Codigo : String;
begin
Result := False;
if (Length(Trim(CodigoArticulo)) = 0) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CODIGOARTICULO ');
SQL.Add('from ESTADOALMACEN ');
SQL.Add('where (CODIGOALMACEN = :CODIGOALMACEN) ');
SQL.Add('and (CODIGOARTICULO = :CODIGOARTICULO) ');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGOALMACEN').AsInteger := CodigoAlmacen;
ParamByName('CODIGOARTICULO').AsString := CodigoArticulo;
try
Prepare;
ExecQuery;
Codigo := FieldByName('CODIGOARTICULO').AsString;
Result := (CodigoArticulo = Codigo);
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulosObraHistorica.existeArticuloEnAlmacen(CodigoEmpresa: Integer; CodigoArticulo: String): Boolean;
{Comprueba si existe un articulo en un determinado almacen, pasandole por
parametro el codigo de articulo y el del almacen, devuelve true o false
dependiendo si existe o no}
var
oSQL : TIBSQL;
Codigo : String;
begin
Result := True;
if (Length(Trim(CodigoArticulo)) = 0) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CODIGOARTICULO ');
SQL.Add('from ESTADOALMACEN ');
SQL.Add('where (CODIGOARTICULO = :CODIGOARTICULO) ');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGOARTICULO').AsString := CodigoArticulo;
try
Prepare;
ExecQuery;
if (RecordCount = 0) then
Result := False;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulosObraHistorica.DarDatosArticuloAlmacen(CodigoEmpresa: Integer;
var Datos: TDatosArticulo): Boolean;
{Devuelve los datos del articulo pasado por parametro si este existe en el
almacen correspondiente, en caso de no existir devuelve false y rellena
dichos datos con 0,0 y 1000 respectibamente}
var
oSQL : TIBSQL;
begin
Result := False;
if (length(Datos.CodigoAlmacen)= 0) then
begin
//Para que cuando un articulo libre que no encuentra las existencias en
//el almacen esten a cero
Datos.Existencias := '0';
Exit;
end;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * ');
SQL.Add('from ESTADOALMACEN ');
SQL.Add('where (CODIGOALMACEN = :CODIGOALMACEN) ');
SQL.Add('and (CODIGOARTICULO = :CODIGOARTICULO) ');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGOALMACEN').AsString := Datos.CodigoAlmacen;
ParamByName('CODIGOARTICULO').AsString := Datos.Codigo;
try
Prepare;
ExecQuery;
if (RecordCount > 0) then
begin
Datos.Existencias := FieldByName('EXISTENCIAS').AsString;
Datos.StockMin := FieldByName('STOCKMIN').AsString;
Datos.StockMax := FieldByName('STOCKMAX').AsString;
Result := True;
end
else
begin
Datos.Existencias := '0';
Datos.StockMin := '0';
Datos.StockMax := '1000';
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
procedure TdmTablaArticulosObraHistorica.InicializarGridArticulosObraHistorica(var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
with Grid do begin
DestroyColumns;
ShowSummaryFooter := True;
{Columna CODIGOOBRA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGOOBRA';
Columna.Visible := false;
{Columna CODIGOFECHACIERRE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'FECHACIERRE';
Columna.Visible := false;
{Columna CODIGOARTICULO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGOARTICULO';
Columna.Caption := 'C<>digo';
Columna.Width := tamColCodigo2;
Columna.SummaryFooterType := cstCount;
Columna.SummaryFooterFormat := 'Total: 0 art<72>culos';
{Columna FAMILIA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'FAMILIA';
Columna.Caption := 'Familia';
Columna.Width := tamColFamilias2;
Columna.Visible := False;
{Columna DESCRIPCION}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'DESCRIPCION';
Columna.Caption := 'Descripci<63>n';
Columna.Width := tamColDescripcion4;
{Columna UNIDADESMEDIDA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'UNIDADESMEDIDA';
Columna.Caption := 'Unidades de medida';
Columna.Width := tamColUnidadesMedida2;
{Columna EXISTENCIAS}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'EXISTENCIAS';
Columna.Caption := 'Existencias';
Columna.Width := tamColExistencias2;
{Columna TOTAL}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'TOTAL';
Columna.Caption := 'Coste total';
Columna.Width := tamColPrecio3;
Columna.SummaryFooterType := cstSum;
Columna.SummaryFooterFormat := 'Total: 0.00 <20>';
{Columna PENDIENTESRECIBIR}
{ Columna := Add;
Columna.Visible := True;
Columna.FieldName := '';
Columna.Title.Caption := 'U. pendientes recibir';}
end;
end;
function TdmTablaArticulosObraHistorica.ArticuloAlmacenTieneExistencias(CodigoEmpresa,
CodigoAlmacen: Integer; CodigoArticulo: String): Boolean;
var
oSQL : TIBSQL;
begin
Result := True;
if (length(CodigoArticulo)= 0) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select EXISTENCIAS ');
SQL.Add('from ESTADOALMACEN ');
SQL.Add('where (CODIGOALMACEN = :CODIGOALMACEN) ');
SQL.Add('and (CODIGOARTICULO = :CODIGOARTICULO) ');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGOALMACEN').AsInteger := CodigoAlmacen;
ParamByName('CODIGOARTICULO').AsString := CodigoArticulo;
try
Prepare;
ExecQuery;
if (RecordCount > 0) and (FieldByName('EXISTENCIAS').AsString = '0') then
Result := False;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulosObraHistorica.DarListaArticulos(Grid : TdxDBGrid; Tabla: TPTabla): TStringList;
var
i: integer;
ListaArticulos : TStringList;
begin
ListaArticulos := Nil;
if Grid.SelectedCount = 0 then
begin
Result := ListaArticulos;
exit
end;
ListaArticulos := TStringList.Create;
Tabla^.DisableControls;
for i:=0 to Grid.SelectedCount-1 do
begin
Tabla^.GotoBookmark(Pointer(Grid.SelectedRows[i]));
ListaArticulos.Add(Tabla^.FieldByName('CODIGOARTICULO').AsString);
end;
Tabla^.EnableControls;
Result := ListaArticulos;
end;
function TdmTablaArticulosObraHistorica.DarObras(CodigoEmpresa: Integer) : TStringList;
var
oSQL : TIBSQL;
lcfCodigo : TTipoCodigoFecha;
lsCadena : String;
ListaAlmacenesCodigo : TStringList;
begin
ListaAlmacenesCodigo := TStringList.Create;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CODIGO, FECHACIERRE, NOMBRE from OBRASHISTORICAS');
SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) ');
SQL.Add('order by NOMBRE');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
try
Prepare;
ExecQuery;
while not EOF do
begin
lcfCodigo := TTipoCodigoFecha.Create;
lcfCodigo.Codigo := FieldByName('CODIGO').AsInteger;
lcfCodigo.Fecha := FieldByName('FECHACIERRE').AsString;
lcfCodigo.Nombre := FieldByName('NOMBRE').AsString;
lsCadena := lcfCodigo.Nombre + ' ' + lcfCodigo.Fecha;
ListaAlmacenesCodigo.AddObject(lsCadena, lcfCodigo);
Next;
end;
finally
Close;
Transaction := NIL;
Free;
Result := ListaAlmacenesCodigo;
end;
end;
end;
function TdmTablaArticulosObraHistorica.InsertarObraHistorica(CodigoEmpresa,
CodigoAlmacen: Integer; Fecha: String): Boolean;
var
oSQL : TIBSQL;
DatosAlmacen : TDatosAlmacen;
begin
Result := False;
DatosAlmacen := TDatosAlmacen.Create;
DatosAlmacen.CodigoEmpresa := EmpresaActiva.Codigo;
DatosAlmacen.Codigo := CodigoAlmacen;
if (dmTablaAlmacenes.DarDatosAlmacen(DatosAlmacen)) then
begin
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('insert into OBRASHISTORICAS (CODIGOEMPRESA, CODIGO, FECHACIERRE, NOMBRE, CALLE, ');
SQL.Add('NUMERO, PISO, CODIGOPOSTAL, POBLACION, PROVINCIA, TELEFONO, PERSONACONTACTO) ');
SQL.Add('values ');
SQL.Add('(:CODIGOEMPRESA, :CODIGO, ');
SQL.Add(':FECHACIERRE, ');
SQL.Add(':NOMBRE, ');
SQL.Add(':CALLE, ');
SQL.Add(':NUMERO, ');
SQL.Add(':PISO, ');
SQL.Add(':CODIGOPOSTAL, ');
SQL.Add(':POBLACION, ');
SQL.Add(':PROVINCIA, ');
SQL.Add(':TELEFONO, ');
SQL.Add(':PERSONACONTACTO)');
try
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGO').AsInteger := DatosAlmacen.Codigo;
ParamByName('FECHACIERRE').AsString := Fecha;
ParamByName('NOMBRE').AsString := DatosAlmacen.Nombre;
ParamByName('CALLE').AsString := DatosAlmacen.Calle;
ParamByName('NUMERO').AsString := DatosAlmacen.Numero;
ParamByName('PISO').AsString := DatosAlmacen.Piso;
ParamByName('CODIGOPOSTAL').AsString := DatosAlmacen.CodigoPostal;
ParamByName('POBLACION').AsString := DatosAlmacen.Poblacion;
ParamByName('PROVINCIA').AsString := DatosAlmacen.Provincia;
ParamByName('TELEFONO').AsString := DatosAlmacen.Telefono;
ParamByName('PERSONACONTACTO').AsString := DatosAlmacen.PersonaContacto;
Prepare;
ExecQuery;
Close;
Transaction := NIL;
Free;
Result := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_foreign_key : begin
VerMensaje(msgHisYaExisteObraHistorica);
end;
else begin
TratarExcepcion(E);
end;
end;
end;
on E : Exception do begin
TratarExcepcion(E);
end;
end;
end;
end;
end;
function TdmTablaArticulosObraHistorica.InsertarArticulosObraHistorica(CodigoEmpresa,
CodigoAlmacen: Integer; Fecha: String): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('insert into ESTADOOBRASHISTORICAS (CODIGOEMPRESA, CODIGOOBRA, FECHACIERRE, CODIGOARTICULO, ');
SQL.Add('FAMILIA, DESCRIPCION, UNIDADESMEDIDA, EXISTENCIAS, OBSERVACIONES, FECHARECEPCION, PRECIORECEPCION) ');
SQL.Add('select CODIGOEMPRESA, CODIGOALMACEN, ');
// No se permite parametrizar antes del where
SQL.Add('''' + DarFormatoInterbaseFecha(Fecha) + '''');
SQL.Add(', CODIGOARTICULO, FAMILIA, DESCRIPCION, UNIDADESMEDIDA, EXISTENCIAS, OBSERVACIONES, FECHARECEPCION, PRECIORECEPCION ');
SQL.Add('from ESTADOALMACEN, ARTICULOS ');
SQL.Add('where (CODIGOALMACEN = :CODIGOALMACEN) ');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
SQL.Add('and (CODIGO = CODIGOARTICULO)');
ParamByName('CODIGOALMACEN').AsInteger := CodigoAlmacen;
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
try
Prepare;
ExecQuery;
Close;
Transaction := NIL;
Free;
Result := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_foreign_key : begin
VerMensaje(msgHisYaExisteObraHistorica);
end;
else begin
TratarExcepcion(E);
end;
end;
end;
on E : Exception do begin
TratarExcepcion(E);
end;
end;
end;
end;
function TdmTablaArticulosObraHistorica.DarDatosMaterial(CodigoEmpresa: Integer; var Datos: TDatosMaterial): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if EsCadenaVacia(Datos.FechaCierre) and EsCadenaVacia(Datos.CodigoArticulo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * from ESTADOOBRASHISTORICAS ');
SQL.Add('where (CODIGOOBRA = :CODIGOOBRA) ');
SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
SQL.Add('and (FECHACIERRE = :FECHACIERRE) ');
SQL.Add('and (CODIGOARTICULO = :CODIGOARTICULO)');
ParamByName('CODIGOOBRA').AsInteger := Datos.CodigoObra;
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('FECHACIERRE').AsString := Datos.FechaCierre;
ParamByName('CODIGOARTICULO').AsString := Datos.CodigoArticulo;
try
Prepare;
ExecQuery;
if (RecordCount > 0) then
begin
with Datos do
begin
Familia := FieldByName('FAMILIA').AsString;
Descripcion := FieldByName('DESCRIPCION').AsString;
Unidadesmedida := FieldByName('UNIDADESMEDIDA').AsString;
Unidadesmedida := FieldByName('EXISTENCIAS').AsString;
Observaciones := FieldByName('OBSERVACIONES').AsString;
Result := True;
end;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulosObraHistorica.ValidarCodigo(Codigo: String): Boolean;
begin
Result := EsNumerico(Codigo);
end;
function TdmTablaArticulosObraHistorica.FormatearCodigo(var Codigo: String): String;
begin
Codigo := StrPadLeft(Codigo, 10, '0');
Result := Codigo;
end;
function TdmTablaArticulosObraHistorica.ExisteArticulo(CodigoEmpresa: Integer; Material: TDatosMaterial): Boolean;
var
oSQL : TIBSQL;
Codigo : String;
begin
Result := False;
if EsCadenaVacia(Material.CodigoObra)
and EsCadenaVacia(Material.FechaCierre)
and EsCadenaVacia(Material.CodigoArticulo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select CODIGOARTICULO ');
SQL.Add('from ESTADOOBRASHISTORICAS ');
SQL.Add('where CODIGOOBRA = :CODIGOOBRA ');
SQL.Add('and FECHACIERRE = :FECHACIERRE ');
SQL.Add('and CODIGOARTICULO = :CODIGOARTICULO ');
SQL.Add('and CODIGOEMPRESA = :CODIGOEMPRESA ');
try
ParamByName('CODIGOOBRA').AsInteger := Material.CodigoObra;
ParamByName('FECHACIERRE').AsString := Material.FechaCierre;
ParamByName('CODIGOARTICULO').AsString := Material.CodigoArticulo;
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
Prepare;
ExecQuery;
Codigo := FieldByName('CODIGOARTICULO').AsString;
Result := (Material.CodigoArticulo = Codigo);
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulosObraHistorica.DarArticuloMax(CodigoEmpresa: Integer; CodigoObra: Integer; FechaCierre: String): String;
var
oSQL : TIBSQL;
begin
Result := '';
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select max(DESCRIPCION) from ESTADOOBRASHISTORICAS ');
SQL.Add('where CODIGOOBRA = :CODIGOOBRA ');
SQL.Add('and FECHACIERRE = :FECHACIERRE ');
SQL.Add('and CODIGOEMPRESA = :CODIGOEMPRESA ');
try
ParamByName('CODIGOOBRA').AsInteger := CodigoObra;
ParamByName('FECHACIERRE').AsString := FechaCierre;
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulosObraHistorica.DarArticuloMin(CodigoEmpresa: Integer; CodigoObra: Integer; FechaCierre: String): String;
var
oSQL : TIBSQL;
begin
Result := '';
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select min(DESCRIPCION) from ESTADOOBRASHISTORICAS ');
SQL.Add('where CODIGOOBRA = :CODIGOOBRA ');
SQL.Add('and FECHACIERRE = :FECHACIERRE ');
SQL.Add('and CODIGOEMPRESA = :CODIGOEMPRESA ');
try
ParamByName('CODIGOOBRA').AsInteger := CodigoObra;
ParamByName('FECHACIERRE').AsString := FechaCierre;
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
procedure TdmTablaArticulosObraHistorica.InicializarTablaArticulosObraHistorica(
Tabla: TPTabla);
begin
with Tabla^.Fields do
begin
with (FieldByName('TOTAL') as TFloatField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
end;
end;
function TdmTablaArticulosObraHistorica.InsertarPresupuestosObraHistorica(
CodigoEmpresa, CodigoAlmacen: Integer; Fecha: String): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('insert into OBRASHISTORICASPRESUPUESTOS (CODIGOEMPRESA, CODIGOALMACEN, FECHACIERRE, CODIGOPRESUPUESTO) ');
SQL.Add('select CODIGOEMPRESA, CODIGOALMACEN, ');
// No se permite parametrizar antes del where
SQL.Add('''' + DarFormatoInterbaseFecha(Fecha) + '''');
SQL.Add(', CODIGOPRESUPUESTO ');
SQL.Add('from OBRASPRESUPUESTOS ');
SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) ');
SQL.Add('and (CODIGOALMACEN = :CODIGOALMACEN) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGOALMACEN').AsInteger := CodigoAlmacen;
try
Prepare;
ExecQuery;
Close;
Transaction := NIL;
Free;
Result := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_foreign_key : begin
VerMensaje(msgHisYaExisteObraHistorica);
end;
else begin
TratarExcepcion(E);
end;
end;
end;
on E : Exception do begin
TratarExcepcion(E);
end;
end;
end;
end;
function TdmTablaArticulosObraHistorica.EliminarPresupuestosObra(
CodigoEmpresa, 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('delete from OBRASPRESUPUESTOS ');
SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)');
SQL.Add('and (CODIGOALMACEN = :CODIGOALMACEN) ');
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
ParamByName('CODIGOALMACEN').AsInteger := CodigoAlmacen;
try
Prepare;
ExecQuery;
Close;
Transaction := NIL;
Free;
Result := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_foreign_key : begin
VerMensaje(msgHisYaExisteObraHistorica);
end;
else begin
TratarExcepcion(E);
end;
end;
end;
on E : Exception do begin
TratarExcepcion(E);
end;
end;
end;
end;
function TdmTablaArticulosObraHistorica.DarDatosObraCerrada(
CodigoEmpresa: Integer; Codigo: Variant): TDatosObraCerrada;
var
oSQL : TIBSQL;
lDatos : TDatosObraCerrada;
begin
Result := Nil;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * ');
SQL.Add('from OBRASHISTORICAS ');
SQL.Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA) ');
ParamByName('CODIGO').AsInteger := Codigo;
ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa;
try
Prepare;
ExecQuery;
if (RecordCount > 0) then
begin
lDatos := TDatosObraCerrada.Create;
lDatos.CodigoEmpresa := FieldByName('CODIGOEMPRESA').AsInteger;
lDatos.Codigo := FieldByName('CODIGO').AsInteger;
lDatos.FechaCierre := FieldByName('FECHACIERRE').AsString;
lDatos.Nombre := FieldByName('NOMBRE').AsString;
lDatos.Calle := FieldByName('CALLE').AsString;
lDatos.Numero := FieldByName('NUMERO').AsString;
lDatos.Piso := FieldByName('PISO').AsString;
lDatos.CodigoPostal := FieldByName('CODIGOPOSTAL').AsString;
lDatos.Poblacion := FieldByName('POBLACION').AsString;
lDatos.Provincia := FieldByName('PROVINCIA').AsString;
lDatos.Telefono := FieldByName('TELEFONO').AsString;
lDatos.PersonaContacto := FieldByName('PERSONACONTACTO').AsString;
Result := lDatos;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
procedure TdmTablaArticulosObraHistorica.InicializarGridObrasCerradas(
var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
with Grid do begin
DestroyColumns;
ShowSummaryFooter := False;
Grid.ColumnByFieldName('ALMACENES.PERSONACONTACTO').Visible := False;
Grid.ColumnByFieldName('CLIENTES.NOMBRE').Visible := False;
{Columna CODIGOEMPRESA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGOEMPRESA';
Columna.Visible := False;
{Columna CODIGOFECHACIERRE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'FECHACIERRE';
Columna.Visible := True;
end;
end;
end.