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/TablaArticulos.pas
2007-06-21 15:47:20 +00:00

709 lines
21 KiB
ObjectPascal

{
===============================================================================
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.0.9
Fecha versión actual: 08-10-2004
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
03-10-2001 Cambio de la mascara de formato de los euros a 4.
18-01-2002 Ordenar por descripción el grid de materiales.
25-01-2002 Cambio en 'DarNuevoCodigo': Se saca el siguiente
codigo mayor disponible.
Cambio en 'IncrementarCodigo': Se saca el siguiente
codigo mayor disponible y se le añade 1.
02-03-2002 Se ha añadido la funcion 'DarListaArticulos' para devolver
una lista de codigos de material a partir de un bookmark
de filas seleccionadas de la tabla de articulos.
07-04-2002 Cambio de todos los procedimientos en los que se utiliza
una transaccion nueva, por una unica transacción.
09-05-2002 Cambio de grid en lugar de utilizar UltimDBGrid,
utilizaremos dxDBGrid.
27-05-2002 Cambio a un objeto contador (TContadorCliente)
16-11-2002 p250. Poner el número total de artículos dados de alta
en la inicialización del grid.
06-03-2004 P272. Adaptación a multiempresa.
08-10-2004 P289. Cambios varios, tener en cuenta los fabricantes y proveedores
para cada uno de los artículos.
===============================================================================
}
unit TablaArticulos;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms,
Dialogs, DBTables, DB, IBCustomDataSet, IBSQL, BaseDatos, IBDatabase,
dxDBGrid, dxDBCtrl, dbgrids, StrFunc, Mensajes, IB;
type
TDatosArticulo = class(TPersistent)
public
Codigo : String;
Familia : String;
Descripcion : String;
Unidadesmedida : String;
Precio : String;
Observaciones : String;
Existencias : String;
StockMin : String;
StockMax : String;
FechaRecepcion : String;
PrecioRecepcion : String;
CodigoAlmacen : Variant;
//Datos proveedor
CodigoFabricante : String;
CodigoProveedor : String;
CodArtFabricante : String;
CodArtProveedor : String;
FechaPrecioPro : String;
PrecioPro : String;
DtoPro : String;
PrecioFinal : String;
end;
TDatosArticuloAlmacen = class(TPersistent)
public
Codigo : String;
Unidadesmedida : String;
Precio : String;
TipoOperacion : String;
TipoMovimiento : String;
Causa : String;
Existencias : String;
StockMin : String;
StockMax : String;
CodigoAlmacen : Variant;
NombreCliente : String;
FechaRecepcion : String;
PrecioRecepcion : String;
end;
TdmTablaArticulos = class(TDataModule)
private
procedure IniciarSQL;
public
sqlInsertar : TStrings;
sqlModificar : TStrings;
sqlConsultar : TStrings;
sqlEliminar : TStrings;
sqlGrid : TStrings;
sqlInsertarArtFabPro : TStrings;
sqlModificarArtFabPro : TStrings;
sqlConsultarArtFabPro : TStrings;
sqlEliminarArtFabPro : TStrings;
sqlGridArtFabPro : TStrings;
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
//Metodos que llamaran a contador
function DarNuevoCodigo : String;
function IncrementarCodigo: boolean;
function InsertarContador: boolean;
function ValidarCodigo(Codigo : String) : Boolean;
function FormatearCodigo(Codigo : String) : String;
function ExisteArticulo(CodigoArticulo : String) : Boolean;
function DarDatosArticulo(var Datos: TDatosArticulo): Boolean;
function DarDatosArticuloPro(var Datos: TDatosArticulo): Boolean;
function DarListaArticulos(Grid : TdxDBGrid; Tabla: TPTabla) : TStringList;
function DarArticuloMin : String;
function DarArticuloMax : String;
procedure InicializarTablaArticulos(Tabla : TPTabla);
procedure InicializarGridArticulos(var Grid: TdxDBGrid);
procedure InicializarGridArticulosFabPro(var Grid: TdxDBGrid);
procedure InicializarGridArticulosFabProDetalles(var Grid: TdxDBGrid);
procedure InicializarTablaArticulosFabPro(Tabla : TPTabla);
end;
var
dmTablaArticulos: TdmTablaArticulos;
implementation
{$R *.DFM}
uses
dxDBTLCL, Excepciones, Constantes, RdxGestorContadores, Contadores;
constructor TdmTablaArticulos.Create (AOwner : TComponent);
begin
inherited;
sqlInsertar := TStringList.Create;
sqlModificar := TStringList.Create;
sqlConsultar := TStringList.Create;
sqlEliminar := TStringList.Create;
sqlGrid := TStringList.Create;
sqlInsertarArtFabPro := TStringList.Create;
sqlModificarArtFabPro := TStringList.Create;
sqlConsultarArtFabPro := TStringList.Create;
sqlEliminarArtFabPro := TStringList.Create;
sqlGridArtFabPro := TStringList.Create;
IniciarSQL;
end;
destructor TdmTablaArticulos.Destroy;
begin
sqlInsertar.Free;
sqlModificar.Free;
sqlConsultar.Free;
sqlEliminar.Free;
sqlGrid.Free;
sqlInsertarArtFabPro.Free;
sqlModificarArtFabPro.Free;
sqlConsultarArtFabPro.Free;
sqlEliminarArtFabPro.Free;
sqlGridArtFabPro.Free;
inherited;
end;
procedure TdmTablaArticulos.IniciarSQL;
begin
with sqlInsertar do
begin
Add('insert into ARTICULOS ');
Add('(CODIGO, FAMILIA, DESCRIPCION, UNIDADESMEDIDA, ');
Add('PRECIO, OBSERVACIONES) ');
Add('values (:CODIGO, :FAMILIA, :DESCRIPCION, :UNIDADESMEDIDA, ');
Add(':PRECIO, :OBSERVACIONES)');
end;
with sqlModificar do
begin
Add('update ARTICULOS set ');
Add('FAMILIA = :FAMILIA, ');
Add('DESCRIPCION = :DESCRIPCION, ');
Add('UNIDADESMEDIDA = :UNIDADESMEDIDA, ');
Add('PRECIO = :PRECIO, ');
Add('OBSERVACIONES = :OBSERVACIONES ');
Add('where CODIGO = :CODIGO');
end;
with sqlEliminar do
begin
Add('delete from ARTICULOS ');
Add('where CODIGO = :CODIGO');
end;
with sqlConsultar do
begin
Add('select * from ARTICULOS ');
Add('where CODIGO = :CODIGO');
end;
with sqlGrid do
begin
Add('select CODIGO, FAMILIA, DESCRIPCION, UNIDADESMEDIDA, PRECIO ');
Add('from ARTICULOS ');
Add('order by DESCRIPCION');
end;
with sqlInsertarArtFabPro do
begin
Add('insert into ARTICULOSFABPRO ');
Add('(CODIGOARTICULO, CODIGOFABRICANTE, CODIGOPROVEEDOR, ');
Add('CODARTFABRICANTE, CODARTPROVEEDOR, FECHAPRECIO, PRECIO, DESCUENTO, PRECIOFINAL) ');
Add('values (:CODIGOARTICULO, :CODIGOFABRICANTE, :CODIGOPROVEEDOR, ');
Add(':CODARTFABRICANTE, :CODARTPROVEEDOR, :FECHAPRECIO, :PRECIO, :DESCUENTO, :PRECIOFINAL) ');
end;
with sqlConsultarArtFabPro do
begin
Add('select CODIGOARTICULO, CODIGOFABRICANTE, FABRICANTE, CODARTFABRICANTE,');
Add('CODIGOPROVEEDOR, PROVEEDOR, CODARTPROVEEDOR, FECHAPRECIO, PRECIO, DESCUENTO, PRECIOFINAL');
Add('from V_ARTICULOSFABPRO');
Add('where CODIGOARTICULO = :CODIGOARTICULO');
Add('order by CODIGOFABRICANTE');
end;
with sqlModificarArtFabPro do
begin
Add('update ARTICULOSFABPRO');
Add('set FECHAPRECIO = :FECHAPRECIO,');
Add('PRECIO = :PRECIO,');
Add('DESCUENTO = :DESCUENTO,');
Add('PRECIOFINAL = :PRECIOFINAL');
Add('where CODIGOARTICULO = :CODIGOARTICULO');
Add('and CODIGOFABRICANTE = :CODIGOFABRICANTE');
Add('and CODIGOPROVEEDOR = :CODIGOPROVEEDOR');
end;
with sqlEliminarArtFabPro do
begin
Add('Delete from ARTICULOSFABPRO');
Add('where CODIGOARTICULO = :CODIGOARTICULO');
Add('and CODIGOFABRICANTE = :CODIGOFABRICANTE');
Add('and CODIGOPROVEEDOR = :CODIGOPROVEEDOR');
end;
with sqlGridArtFabPro do
begin
Add('select ART.CODIGO, ART.FAMILIA, ART.DESCRIPCION, ART.UNIDADESMEDIDA, AFP.FABRICANTE, AFP.CODARTFABRICANTE,');
Add('AFP.PROVEEDOR, AFP.CODARTPROVEEDOR, AFP.FECHAPRECIO, AFP.PRECIO, AFP.DESCUENTO, AFP.PRECIOFINAL');
Add('from ARTICULOS ART right join V_ARTICULOSFABPRO AFP');
Add('on ART.CODIGO = AFP.CODIGOARTICULO');
Add('order by ART.DESCRIPCION');
end;
end;
function TdmTablaArticulos.darNuevoCodigo : String;
begin
Result := GestorContadores.DarNuevoCodigo(contArticulos);
end;
function TdmTablaArticulos.IncrementarCodigo: boolean;
begin
Result := GestorContadores.IncrementarValor(contArticulos);
end;
function TdmTablaArticulos.validarCodigo(Codigo : String) : Boolean;
begin
Result := GestorContadores.ValidarCodigo(contArticulos, Codigo);
end;
function TdmTablaArticulos.formatearCodigo(Codigo : String) : String;
begin
Result := GestorContadores.FormatearCodigo(contArticulos, Codigo);
end;
function TdmTablaArticulos.insertarContador: boolean;
begin
Result := GestorContadores.InsertarContador(contArticulos);
end;
function TdmTablaArticulos.existeArticulo(CodigoArticulo: String): Boolean;
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 CODIGO ');
SQL.Add('from ARTICULOS ');
SQL.Add('where CODIGO = :CODIGO ');
try
ParamByName('CODIGO').AsString := CodigoArticulo;
Prepare;
ExecQuery;
Codigo := FieldByName('CODIGO').AsString;
Result := (CodigoArticulo = Codigo);
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulos.DarDatosArticulo(var Datos: TDatosArticulo): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if EsCadenaVacia(Datos.Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * from ARTICULOS ');
SQL.Add('where CODIGO = :CODIGO');
try
ParamByName('CODIGO').AsString := Datos.Codigo;
Prepare;
ExecQuery;
if (RecordCount > 0) then
begin
with Datos do
begin
Familia := FieldByName('FAMILIA').AsString;
Descripcion := FieldByName('DESCRIPCION').AsString;
Unidadesmedida := FieldByName('UNIDADESMEDIDA').AsString;
Precio := FieldByName('PRECIO').AsString;
Observaciones := FieldByName('OBSERVACIONES').AsString;
//Inicializamos el resto de campos
Existencias := '0';
StockMin := '0';
StockMax := '1000';
Result := True;
end;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
procedure TdmTablaArticulos.InicializarGridArticulos(var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
with Grid do begin
DestroyColumns;
ShowSummaryFooter := True;
{Columna CODIGO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGO';
Columna.Caption := 'Código';
Columna.Width := tamColCodigo;
Columna.SummaryFooterType := cstCount;
Columna.SummaryFooterFormat := 'Total: 0 artículos';
{Columna FAMILIA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'FAMILIA';
Columna.Caption := 'Familia';
Columna.Width := tamColFamilias;
Columna.Visible := False;
{Columna DESCRIPCION}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'DESCRIPCION';
Columna.Caption := 'Descripción';
Columna.Width := tamColDescripcion;
{Columna UNIDADESMEDIDA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'UNIDADESMEDIDA';
Columna.Caption := 'Unid. medida';
Columna.Width := tamColUnidadesMedida;
{Columna PRECIO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PRECIO';
Columna.Caption := 'Precio unidad';
Columna.Width := tamColPrecio;
end;
end;
procedure TdmTablaArticulos.InicializarTablaArticulos(Tabla : TPTabla);
begin
with Tabla^.Fields do
begin
with (FieldByName('PRECIO') as TFloatField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
end;
end;
function TdmTablaArticulos.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('CODIGO').AsString);
end;
Tabla^.EnableControls;
Result := ListaArticulos;
end;
function TdmTablaArticulos.DarArticuloMax: 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 ARTICULOS ');
try
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulos.DarArticuloMin: 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 ARTICULOS ');
try
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
procedure TdmTablaArticulos.InicializarGridArticulosFabPro(
var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
with Grid do begin
DestroyColumns;
ShowSummaryFooter := True;
{Columna CODIGO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGO';
Columna.Caption := 'Código';
Columna.Width := tamColCodigo4;
Columna.SummaryFooterType := cstCount;
Columna.SummaryFooterFormat := 'Total: 0 artículos';
{Columna FAMILIA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'FAMILIA';
Columna.Caption := 'Familia';
Columna.Width := tamColFamilias;
Columna.Visible := False;
{Columna PROVEEDOR}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PROVEEDOR';
Columna.Caption := 'Proveedor';
Columna.Width := tamColProveedor2;
{Columna CODARTPROVEEDOR}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODARTPROVEEDOR';
Columna.Caption := 'Cod.Proveedor';
Columna.Width := tamColCodProveedor;
{Columna DESCRIPCION}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'DESCRIPCION';
Columna.Caption := 'Descripción';
Columna.Width := tamColDescripcion2;
{Columna UNIDADESMEDIDA}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'UNIDADESMEDIDA';
Columna.Caption := 'Unid. medida';
Columna.Width := tamColUnidadesMedida2;
{Columna FABRICANTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'FABRICANTE';
Columna.Caption := 'Fabricante';
Columna.Width := tamColFabricante;
{Columna CODARTFABRICANTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODARTFABRICANTE';
Columna.Caption := 'Cod. Fabricante';
Columna.Width := tamColCodFabricante;
{Columna FECHAPRECIO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'FECHAPRECIO';
Columna.Caption := 'Fecha precio';
Columna.Width := tamColFecha;
{Columna PRECIO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PRECIO';
Columna.Caption := 'Precio';
Columna.Width := tamColPrecio6;
{Columna DESCUENTO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'DESCUENTO';
Columna.Caption := 'Dto.';
Columna.Width := tamColPorcentaje;
{Columna PRECIOFINAL}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PRECIOFINAL';
Columna.Caption := 'Precio final';
Columna.Width := tamColPrecio6;
end;
end;
procedure TdmTablaArticulos.InicializarTablaArticulosFabPro(
Tabla: TPTabla);
begin
with Tabla^.Fields do
begin
with (FieldByName('PRECIO') as TFloatField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
with (FieldByName('DESCUENTO') as TFloatField) do begin
DisplayFormat := DISPLAY_DTO;
EditFormat := DISPLAY_DTO;
end;
with (FieldByName('PRECIOFINAL') as TNumericField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;
end;
end;
procedure TdmTablaArticulos.InicializarGridArticulosFabProDetalles(
var Grid: TdxDBGrid);
var
Columna : TdxDBTreeListColumn;
begin
with Grid do begin
DestroyColumns;
{Columna CODIGOARTICULO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODIGOARTICULO';
Columna.Caption := 'Cod.Artículo';
Columna.Width := tamColCodigo;
Columna.Visible := False;
{Columna FABRICANTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'FABRICANTE';
Columna.Caption := 'Fabricante';
Columna.Width := tamColFabricante;
Columna.DisableEditor := True;
{Columna CODARTFABRICANTE}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODARTFABRICANTE';
Columna.Caption := 'Cod. Fabricante';
Columna.Width := tamColCodigo;
{Columna PROVEEDOR}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PROVEEDOR';
Columna.Caption := 'Proveedor';
Columna.Width := tamColNombreProveedor;
Columna.DisableEditor := True;
{Columna CODARTPROVEEDOR}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'CODARTPROVEEDOR';
Columna.Caption := 'Cod.Proveedor';
Columna.Width := tamColCodigo;
{Columna FECHAPRECIO}
Columna := CreateColumn(TdxDBTreeListDateColumn);
Columna.FieldName := 'FECHAPRECIO';
Columna.Caption := 'Fecha';
Columna.Width := tamColFecha;
{Columna PRECIO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PRECIO';
Columna.Caption := 'Precio';
Columna.Width := tamColPrecio;
{Columna DESCUENTO}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'DESCUENTO';
Columna.Caption := 'Dto.';
Columna.Width := tamColPorcentaje3;
{Columna PRECIOFINAL}
Columna := CreateColumn(TdxDBTreeListColumn);
Columna.FieldName := 'PRECIOFINAL';
Columna.Caption := 'Precio final';
Columna.Width := tamColPrecio;
Columna.DisableEditor := True;
end;
end;
function TdmTablaArticulos.DarDatosArticuloPro(
var Datos: TDatosArticulo): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if EsCadenaVacia(Datos.Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * from ARTICULOS ');
SQL.Add('where CODIGO = :CODIGO');
try
ParamByName('CODIGO').AsString := Datos.Codigo;
Prepare;
ExecQuery;
if (RecordCount > 0) then
begin
with Datos do
begin
Familia := FieldByName('FAMILIA').AsString;
Descripcion := FieldByName('DESCRIPCION').AsString;
Unidadesmedida := FieldByName('UNIDADESMEDIDA').AsString;
Precio := FieldByName('PRECIO').AsString;
Observaciones := FieldByName('OBSERVACIONES').AsString;
//Inicializamos el resto de campos
Existencias := '0';
StockMin := '0';
StockMax := '1000';
Result := True;
end;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
end.