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; procedure InformeGetParametersText(Memo : TStringList); protected 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'; OnGetParametersText := InformeGetParametersText; Tipo := tiTodo; end; procedure TdmInformeEstadoAlmacen.InformeGetParametersText( Memo: TStringList); begin with Memo do begin Add('Almacén: ' + IntToStr(CodigoAlmacen) + ' - ' + NombreAlmacen); case Tipo of tiTodo : Add(msgInfIntervaloTodosArt); tiPorDescripcion : Add(SysUtils.Format(msgInfIntervaloDesArt, [FDesIni, FDesFin])); tiPorFamilias : Add(SysUtils.Format(msgInfIntervaloFam, [FFamIni, FFamFin])); end; end; 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; end.