unit InformeEstadoAlmacen; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, InformeBase, FR_IBXDB, FR_Shape, FR_Class, Db, IBCustomDataSet, IBQuery, IBDatabase, FR_DSet, FR_DBSet, Tipos; type TdmInformeEstadoAlmacen = class(TdmInformeBase) TablaEstado: TIBQuery; frdsTablaEstado: TfrDBDataSet; private FAlmacen: Integer; FFamIni: string; FFamFin: string; FNombreAlmacen: string; FTipo: TTipoInforme; FDesIni: string; FDesFin: string; protected procedure RellenarCabecera(Band: TfrBand); override; procedure PrepararConsultas; override; public constructor Create(AOwner: TComponent); override; published property Tipo : TTipoInforme read FTipo write FTipo; property DescripcionIni : string read FDesIni write FDesIni; property DescripcionFin : string read FDesFin write FDesFin; property FamiliaIni : string read FFamIni write FFamIni; property FamiliaFin : string read FFamFin write FFamFin; property CodigoAlmacen : Integer read FAlmacen write FAlmacen; property NombreAlmacen : string read FNombreAlmacen write FNombreAlmacen; end; var dmInformeEstadoAlmacen: TdmInformeEstadoAlmacen; implementation {$R *.DFM} { TdmInformeEstadoAlmacen } uses RdxEmpresaActiva, Literales; constructor TdmInformeEstadoAlmacen.Create(AOwner: TComponent); begin inherited; FNombreInforme := 'ListadoEstadoAlmacen.frf'; Tipo := tiTodo; end; procedure TdmInformeEstadoAlmacen.PrepararConsultas; begin TablaEstado.Database := FBaseDatos; TablaEstado.Transaction := FTransaccion; with TablaEstado.SQL do begin Clear; case Tipo of tiTodo : begin Add('select distinct E.CODIGOARTICULO, A.DESCRIPCION, E.EXISTENCIAS, '); Add('E.STOCKMIN, E.STOCKMAX, sum(PENDIENTES) as "PENDIENTE" '); Add('from ARTICULOS A, ESTADOALMACEN E '); Add('left outer join PEDIDOSPROVEEDOR P '); Add('on (P.CODIGOALMACEN = E.CODIGOALMACEN and P.CODIGOEMPRESA = E.CODIGOEMPRESA) '); Add('left outer join DETALLESPEDIDOSPROVEEDOR D '); Add('on ((D.CODIGOPEDIDO = P.CODIGO) and (D.CODIGOARTICULO = E.CODIGOARTICULO) and '); Add('(D.CODIGOEMPRESA = P.CODIGOEMPRESA)) '); Add('where E.CODIGOEMPRESA = :CODIGOEMPRESA '); Add('and E.CODIGOALMACEN = :CODIGOALMACEN '); Add('and A.CODIGO = E.CODIGOARTICULO '); Add('group by E.CODIGOARTICULO, A.DESCRIPCION, E.EXISTENCIAS, '); Add('E.STOCKMIN, E.STOCKMAX '); Add('order by E.CODIGOARTICULO '); end; tiPorDescripcion: begin Add('select distinct E.CODIGOARTICULO, A.DESCRIPCION, E.EXISTENCIAS, '); Add('E.STOCKMIN, E.STOCKMAX, sum(PENDIENTES) as "PENDIENTE" '); Add('from ARTICULOS A, ESTADOALMACEN E '); Add('left outer join PEDIDOSPROVEEDOR P '); Add('on (P.CODIGOALMACEN = E.CODIGOALMACEN and P.CODIGOEMPRESA = E.CODIGOEMPRESA) '); Add('left outer join DETALLESPEDIDOSPROVEEDOR D '); Add('on ((D.CODIGOPEDIDO = P.CODIGO) and (D.CODIGOARTICULO = E.CODIGOARTICULO) and '); Add('(D.CODIGOEMPRESA = P.CODIGOEMPRESA)) '); Add('where E.CODIGOEMPRESA = :CODIGOEMPRESA '); Add('and E.CODIGOALMACEN = :CODIGOALMACEN '); Add('and A.CODIGO = E.CODIGOARTICULO '); Add('and upper(A.DESCRIPCION) between upper(:DESCRIPCIONINI) and upper(:DESCRIPCIONFIN) '); Add('group by E.CODIGOARTICULO, A.DESCRIPCION, E.EXISTENCIAS, '); Add('E.STOCKMIN, E.STOCKMAX '); Add('order by E.CODIGOARTICULO '); TablaEstado.ParamByName('DESCRIPCIONINI').AsString := FDesIni; TablaEstado.ParamByName('DESCRIPCIONFIN').AsString := FDesFin; end; tiPorFamilias : begin Add('select distinct E.CODIGOARTICULO, A.DESCRIPCION, E.EXISTENCIAS, '); Add('E.STOCKMIN, E.STOCKMAX, sum(PENDIENTES) as "PENDIENTE" '); Add('from ARTICULOS A, ESTADOALMACEN E '); Add('left outer join PEDIDOSPROVEEDOR P '); Add('on (P.CODIGOALMACEN = E.CODIGOALMACEN and P.CODIGOEMPRESA = E.CODIGOEMPRESA) '); Add('left outer join DETALLESPEDIDOSPROVEEDOR D '); Add('on ((D.CODIGOPEDIDO = P.CODIGO) and (D.CODIGOARTICULO = E.CODIGOARTICULO) and '); Add('(D.CODIGOEMPRESA = P.CODIGOEMPRESA)) '); Add('where E.CODIGOEMPRESA = :CODIGOEMPRESA '); Add('and E.CODIGOALMACEN = :CODIGOALMACEN '); Add('and A.FAMILIA between :FAMILIAINI and :FAMILIAFIN '); Add('and A.CODIGO = E.CODIGOARTICULO '); Add('group by E.CODIGOARTICULO, A.DESCRIPCION, E.EXISTENCIAS, '); Add('E.STOCKMIN, E.STOCKMAX '); Add('order by E.CODIGOARTICULO '); TablaEstado.ParamByName('FAMILIAINI').AsString := FFamIni; TablaEstado.ParamByName('FAMILIAFIN').AsString := FFamFin; end; end; TablaEstado.ParambyName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; TablaEstado.ParambyName('CODIGOALMACEN').AsInteger := CodigoAlmacen; end; end; procedure TdmInformeEstadoAlmacen.RellenarCabecera(Band: TfrBand); var iCont : Integer; Objeto : TfrView; begin inherited; with Band do begin for iCont := 0 to Objects.Count - 1 do begin Objeto := Objects[iCont]; if ((Objeto is TfrMemoView) and (Objeto.Name = 'CabParametros')) then begin with (Objeto as TfrMemoView) do begin Memo.Clear; Memo.Add('Almacén: ' + IntToStr(CodigoAlmacen) + ' - ' + NombreAlmacen); case Tipo of tiTodo : Memo.Add(msgInfIntervaloTodosArt); tiPorDescripcion : Memo.Add(SysUtils.Format(msgInfIntervaloDesArt, [FDesIni, FDesFin])); tiPorFamilias : Memo.Add(SysUtils.Format(msgInfIntervaloFam, [FFamIni, FFamFin])); end; end; end; end; end; end; end.