Fórum Extrato de Estoque #559210
12/07/2016
0
Pessoal, preciso montar um extrato de estoque onde que eu possa escolher o produto e período e me retornar como o exemplo abaixo, como posso fazer isso ?, (Banco de dados Firebird + Delphi Xe8)
Data | Histórico I Tipo | Quantidade | Saldo |
01/06/2016 | Venda Nº 50 | Saída | 10 | 0 |
01/06/2016 | Venda Nº 51 | Saída | 5 | -5 |
01/06/2016 | Entrada Nf 1252 | Entrada | 20 | 15 |
Data | Histórico I Tipo | Quantidade | Saldo |
01/06/2016 | Venda Nº 50 | Saída | 10 | 0 |
01/06/2016 | Venda Nº 51 | Saída | 5 | -5 |
01/06/2016 | Entrada Nf 1252 | Entrada | 20 | 15 |
Softsan Software
Curtir tópico
+ 0
Responder
Posts
02/08/2016
Devmedia
Olá,
Bom, você poderá criar essa consulta em seu banco de dados, por exemplo:
Na sequencia, em uma tela com o DBGRID, por exemplo, você poderá exibir esses dados ou até mesmo em uma ferramenta de relatório, rave, fastreport, etc.. q tal?
Grande abraço :)
Bom, você poderá criar essa consulta em seu banco de dados, por exemplo:
select data, historico, tipo, quantidade, saldo from estoque where nome_produto = 'COMPUTADOR' and data >= '01/08/2016' and data <= '31/08/2016'
Na sequencia, em uma tela com o DBGRID, por exemplo, você poderá exibir esses dados ou até mesmo em uma ferramenta de relatório, rave, fastreport, etc.. q tal?
Grande abraço :)
Responder
Gostei + 0
02/08/2016
Softsan Software
Então acabei resolvendo montando uma procedure no banco de dados, pois trabalho com varias tabelas, ficou assim:
create or alter procedure SP_EXTRATO_ESTOQUE (
CODEMP integer,
CODPRO integer,
DATAINI date)
returns (
TIPO integer,
COD_EMP integer,
DATA date,
QUANT numeric(18,3),
HISTORICO varchar(150) character set WIN1252)
as
BEGIN
IF (CODEMP = 0) THEN
BEGIN
FOR SELECT I.COD_EMP, I.QTD_PRO, E.DATAENT_ENT, 1, 'ENTRADA N ' || E.COD_ENT || ' - ' ||
F.RAZAO_FOR
FROM ITENS_ENTRADA I
INNER JOIN ENTRADAS E
ON (I.COD_ENT = E.COD_ENT)
INNER JOIN FORNECEDOR F
ON (E.COD_FOR = F.COD_FOR)
INNER JOIN TIPO_ES T
ON (E.CODIGO_ES = T.COD_ES)
WHERE E.DATAENT_ENT >= :DATAINI AND I.COD_PRO = :CODPRO AND T.CONTROLA_ESTOQUE = 'S'
ORDER BY E.DATAENT_ENT
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, A.DATA_ACE, 2, 'ACERTO N ' || A.COD_ACE || ' - ' ||
M.NOME_MOT
FROM ITENS_ACERTO_ESTOQUE I
INNER JOIN ACERTO_ESTOQUE A
ON (I.COD_ACE = A.COD_ACE)
INNER JOIN MOTIVO_ACERTO M
ON (I.COD_MOT = M.COD_MOT)
WHERE A.DATA_ACE >= :DATAINI AND I.COD_PRO = :CODPRO AND M.ENTSAI_MOT = 'E'
ORDER BY A.DATA_ACE
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT_ITEM, O.DATA_OUTRA, 3, TP.NOME_ES || ' N ' || O.COD_OUTRA || ' - ' ||
F.RAZAO_FOR
FROM ITENS_OUTRAS_ENTRADAS I
INNER JOIN OUTRAS_ENTRADAS O
ON (I.COD_OUTRA = O.COD_OUTRA)
INNER JOIN FORNECEDOR F
ON (O.COD_FOR = F.COD_FOR)
INNER JOIN TIPO_ES TP
ON (O.COD_ES = TP.COD_ES)
WHERE O.DATA_OUTRA >= :DATAINI AND I.COD_PRO = :CODPRO AND I.CANCELADO = 0 AND TP.CONTROLA_ESTOQUE = 'S'
ORDER BY O.DATA_OUTRA
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, V.DATA_VEN, 7, 'VENDA N ' || V.COD_VEN || ' - ' ||
C.NOME_CLI
FROM ITENS_VENDA I
INNER JOIN VENDAS V
ON (I.COD_VEN = V.COD_VEN)
INNER JOIN CLIENTE C
ON (V.COD_CLI = C.COD_CLI)
WHERE V.DATA_VEN >= :DATAINI AND I.COD_PRO = :CODPRO AND I.CANCELADO = 0 AND I.VENDA_CANCELADA = 0
ORDER BY V.DATA_VEN
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, A.DATA_ACE, 8, 'ACERTO N ' || A.COD_ACE || ' - ' ||
M.NOME_MOT
FROM ITENS_ACERTO_ESTOQUE I
INNER JOIN ACERTO_ESTOQUE A
ON (I.COD_ACE = A.COD_ACE)
INNER JOIN MOTIVO_ACERTO M
ON (I.COD_MOT = M.COD_MOT)
WHERE A.DATA_ACE >= :DATAINI AND I.COD_PRO = :CODPRO AND M.ENTSAI_MOT = 'S'
ORDER BY A.DATA_ACE
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT_ITEM, O.DATA_OUTRA, 9, TP.NOME_ES || ' N ' || O.COD_OUTRA || ' - ' ||
C.NOME_CLI
FROM ITENS_OUTRAS_SAIDAS I
INNER JOIN OUTRAS_SAIDAS O
ON (I.COD_OUTRA = O.COD_OUTRA)
INNER JOIN CLIENTE C
ON (O.COD_CLI = C.COD_CLI)
INNER JOIN TIPO_ES TP
ON (O.COD_ES = TP.COD_ES)
WHERE O.DATA_OUTRA >= :DATAINI AND I.COD_PRO = :CODPRO
AND I.CANCELADO = 0 AND TP.controla_estoque = 'S'
ORDER BY O.DATA_OUTRA
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
END
ELSE
BEGIN
FOR SELECT I.COD_EMP, I.QTD_PRO, E.DATAENT_ENT, 1, 'ENTRADA N ' || E.COD_ENT || ' - ' ||
F.RAZAO_FOR
FROM ITENS_ENTRADA I
INNER JOIN ENTRADAS E
ON (I.COD_ENT = E.COD_ENT)
INNER JOIN FORNECEDOR F
ON (E.COD_FOR = F.COD_FOR)
INNER JOIN TIPO_ES T
ON (E.CODIGO_ES = T.COD_ES)
WHERE E.DATAENT_ENT >= :DATAINI AND I.COD_PRO = :CODPRO AND I.COD_EMP = :CODEMP AND T.CONTROLA_ESTOQUE = 'S'
ORDER BY E.DATAENT_ENT
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, A.DATA_ACE, 2, 'ACERTO N ' || A.COD_ACE || ' - ' || M.NOME_MOT
FROM ITENS_ACERTO_ESTOQUE I
INNER JOIN ACERTO_ESTOQUE A
ON (I.COD_ACE = A.COD_ACE)
INNER JOIN MOTIVO_ACERTO M
ON (I.COD_MOT = M.COD_MOT)
WHERE A.DATA_ACE >= :DATAINI AND I.COD_PRO = :CODPRO AND M.ENTSAI_MOT = 'E' AND
I.COD_EMP = :CODEMP
ORDER BY A.DATA_ACE
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT_ITEM, O.DATA_OUTRA, 3, TP.NOME_ES || ' N ' || O.COD_OUTRA || ' - ' ||
F.RAZAO_FOR
FROM ITENS_OUTRAS_ENTRADAS I
INNER JOIN OUTRAS_ENTRADAS O
ON (I.COD_OUTRA = O.COD_OUTRA)
INNER JOIN FORNECEDOR F
ON (O.COD_FOR = F.COD_FOR)
INNER JOIN TIPO_ES TP
ON (O.COD_ES = TP.COD_ES)
WHERE O.DATA_OUTRA >= :DATAINI AND I.COD_PRO = :CODPRO AND I.COD_EMP = :CODEMP AND I.CANCELADO = 0
AND TP.CONTROLA_ESTOQUE = 'S'
ORDER BY O.DATA_OUTRA
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, V.DATA_VEN, 7, 'VENDA N ' || V.COD_VEN || ' - ' ||
C.NOME_CLI
FROM ITENS_VENDA I
INNER JOIN VENDAS V
ON (I.COD_VEN = V.COD_VEN)
INNER JOIN CLIENTE C
ON (V.COD_CLI = C.COD_CLI)
WHERE V.DATA_VEN >= :DATAINI AND I.COD_PRO = :CODPRO AND I.COD_EMP = :CODEMP AND I.CANCELADO = 0 AND I.VENDA_CANCELADA = 0
ORDER BY V.DATA_VEN
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, A.DATA_ACE, 8, 'ACERTO N ' || A.COD_ACE || ' - ' || M.NOME_MOT
FROM ITENS_ACERTO_ESTOQUE I
INNER JOIN ACERTO_ESTOQUE A
ON (I.COD_ACE = A.COD_ACE)
INNER JOIN MOTIVO_ACERTO M
ON (I.COD_MOT = M.COD_MOT)
WHERE A.DATA_ACE >= :DATAINI AND I.COD_PRO = :CODPRO AND M.ENTSAI_MOT = 'S'
AND I.COD_EMP = :CODEMP
ORDER BY A.DATA_ACE
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT_ITEM, O.DATA_OUTRA, 9, TP.NOME_ES || ' N ' || O.COD_OUTRA || ' - ' ||
C.NOME_CLI
FROM ITENS_OUTRAS_SAIDAS I
INNER JOIN OUTRAS_SAIDAS O
ON (I.COD_OUTRA = O.COD_OUTRA)
INNER JOIN CLIENTE C
ON (O.COD_CLI = C.COD_CLI)
INNER JOIN TIPO_ES TP
ON (O.COD_ES = TP.COD_ES)
WHERE O.DATA_OUTRA >= :DATAINI AND I.COD_PRO = :CODPRO
AND I.COD_EMP = :CODEMP AND I.CANCELADO = 0
AND TP.controla_estoque = 'S'
ORDER BY O.DATA_OUTRA
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
END
END
create or alter procedure SP_EXTRATO_ESTOQUE (
CODEMP integer,
CODPRO integer,
DATAINI date)
returns (
TIPO integer,
COD_EMP integer,
DATA date,
QUANT numeric(18,3),
HISTORICO varchar(150) character set WIN1252)
as
BEGIN
IF (CODEMP = 0) THEN
BEGIN
FOR SELECT I.COD_EMP, I.QTD_PRO, E.DATAENT_ENT, 1, 'ENTRADA N ' || E.COD_ENT || ' - ' ||
F.RAZAO_FOR
FROM ITENS_ENTRADA I
INNER JOIN ENTRADAS E
ON (I.COD_ENT = E.COD_ENT)
INNER JOIN FORNECEDOR F
ON (E.COD_FOR = F.COD_FOR)
INNER JOIN TIPO_ES T
ON (E.CODIGO_ES = T.COD_ES)
WHERE E.DATAENT_ENT >= :DATAINI AND I.COD_PRO = :CODPRO AND T.CONTROLA_ESTOQUE = 'S'
ORDER BY E.DATAENT_ENT
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, A.DATA_ACE, 2, 'ACERTO N ' || A.COD_ACE || ' - ' ||
M.NOME_MOT
FROM ITENS_ACERTO_ESTOQUE I
INNER JOIN ACERTO_ESTOQUE A
ON (I.COD_ACE = A.COD_ACE)
INNER JOIN MOTIVO_ACERTO M
ON (I.COD_MOT = M.COD_MOT)
WHERE A.DATA_ACE >= :DATAINI AND I.COD_PRO = :CODPRO AND M.ENTSAI_MOT = 'E'
ORDER BY A.DATA_ACE
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT_ITEM, O.DATA_OUTRA, 3, TP.NOME_ES || ' N ' || O.COD_OUTRA || ' - ' ||
F.RAZAO_FOR
FROM ITENS_OUTRAS_ENTRADAS I
INNER JOIN OUTRAS_ENTRADAS O
ON (I.COD_OUTRA = O.COD_OUTRA)
INNER JOIN FORNECEDOR F
ON (O.COD_FOR = F.COD_FOR)
INNER JOIN TIPO_ES TP
ON (O.COD_ES = TP.COD_ES)
WHERE O.DATA_OUTRA >= :DATAINI AND I.COD_PRO = :CODPRO AND I.CANCELADO = 0 AND TP.CONTROLA_ESTOQUE = 'S'
ORDER BY O.DATA_OUTRA
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, V.DATA_VEN, 7, 'VENDA N ' || V.COD_VEN || ' - ' ||
C.NOME_CLI
FROM ITENS_VENDA I
INNER JOIN VENDAS V
ON (I.COD_VEN = V.COD_VEN)
INNER JOIN CLIENTE C
ON (V.COD_CLI = C.COD_CLI)
WHERE V.DATA_VEN >= :DATAINI AND I.COD_PRO = :CODPRO AND I.CANCELADO = 0 AND I.VENDA_CANCELADA = 0
ORDER BY V.DATA_VEN
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, A.DATA_ACE, 8, 'ACERTO N ' || A.COD_ACE || ' - ' ||
M.NOME_MOT
FROM ITENS_ACERTO_ESTOQUE I
INNER JOIN ACERTO_ESTOQUE A
ON (I.COD_ACE = A.COD_ACE)
INNER JOIN MOTIVO_ACERTO M
ON (I.COD_MOT = M.COD_MOT)
WHERE A.DATA_ACE >= :DATAINI AND I.COD_PRO = :CODPRO AND M.ENTSAI_MOT = 'S'
ORDER BY A.DATA_ACE
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT_ITEM, O.DATA_OUTRA, 9, TP.NOME_ES || ' N ' || O.COD_OUTRA || ' - ' ||
C.NOME_CLI
FROM ITENS_OUTRAS_SAIDAS I
INNER JOIN OUTRAS_SAIDAS O
ON (I.COD_OUTRA = O.COD_OUTRA)
INNER JOIN CLIENTE C
ON (O.COD_CLI = C.COD_CLI)
INNER JOIN TIPO_ES TP
ON (O.COD_ES = TP.COD_ES)
WHERE O.DATA_OUTRA >= :DATAINI AND I.COD_PRO = :CODPRO
AND I.CANCELADO = 0 AND TP.controla_estoque = 'S'
ORDER BY O.DATA_OUTRA
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
END
ELSE
BEGIN
FOR SELECT I.COD_EMP, I.QTD_PRO, E.DATAENT_ENT, 1, 'ENTRADA N ' || E.COD_ENT || ' - ' ||
F.RAZAO_FOR
FROM ITENS_ENTRADA I
INNER JOIN ENTRADAS E
ON (I.COD_ENT = E.COD_ENT)
INNER JOIN FORNECEDOR F
ON (E.COD_FOR = F.COD_FOR)
INNER JOIN TIPO_ES T
ON (E.CODIGO_ES = T.COD_ES)
WHERE E.DATAENT_ENT >= :DATAINI AND I.COD_PRO = :CODPRO AND I.COD_EMP = :CODEMP AND T.CONTROLA_ESTOQUE = 'S'
ORDER BY E.DATAENT_ENT
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, A.DATA_ACE, 2, 'ACERTO N ' || A.COD_ACE || ' - ' || M.NOME_MOT
FROM ITENS_ACERTO_ESTOQUE I
INNER JOIN ACERTO_ESTOQUE A
ON (I.COD_ACE = A.COD_ACE)
INNER JOIN MOTIVO_ACERTO M
ON (I.COD_MOT = M.COD_MOT)
WHERE A.DATA_ACE >= :DATAINI AND I.COD_PRO = :CODPRO AND M.ENTSAI_MOT = 'E' AND
I.COD_EMP = :CODEMP
ORDER BY A.DATA_ACE
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT_ITEM, O.DATA_OUTRA, 3, TP.NOME_ES || ' N ' || O.COD_OUTRA || ' - ' ||
F.RAZAO_FOR
FROM ITENS_OUTRAS_ENTRADAS I
INNER JOIN OUTRAS_ENTRADAS O
ON (I.COD_OUTRA = O.COD_OUTRA)
INNER JOIN FORNECEDOR F
ON (O.COD_FOR = F.COD_FOR)
INNER JOIN TIPO_ES TP
ON (O.COD_ES = TP.COD_ES)
WHERE O.DATA_OUTRA >= :DATAINI AND I.COD_PRO = :CODPRO AND I.COD_EMP = :CODEMP AND I.CANCELADO = 0
AND TP.CONTROLA_ESTOQUE = 'S'
ORDER BY O.DATA_OUTRA
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, V.DATA_VEN, 7, 'VENDA N ' || V.COD_VEN || ' - ' ||
C.NOME_CLI
FROM ITENS_VENDA I
INNER JOIN VENDAS V
ON (I.COD_VEN = V.COD_VEN)
INNER JOIN CLIENTE C
ON (V.COD_CLI = C.COD_CLI)
WHERE V.DATA_VEN >= :DATAINI AND I.COD_PRO = :CODPRO AND I.COD_EMP = :CODEMP AND I.CANCELADO = 0 AND I.VENDA_CANCELADA = 0
ORDER BY V.DATA_VEN
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT, A.DATA_ACE, 8, 'ACERTO N ' || A.COD_ACE || ' - ' || M.NOME_MOT
FROM ITENS_ACERTO_ESTOQUE I
INNER JOIN ACERTO_ESTOQUE A
ON (I.COD_ACE = A.COD_ACE)
INNER JOIN MOTIVO_ACERTO M
ON (I.COD_MOT = M.COD_MOT)
WHERE A.DATA_ACE >= :DATAINI AND I.COD_PRO = :CODPRO AND M.ENTSAI_MOT = 'S'
AND I.COD_EMP = :CODEMP
ORDER BY A.DATA_ACE
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
FOR SELECT I.COD_EMP, I.QUANT_ITEM, O.DATA_OUTRA, 9, TP.NOME_ES || ' N ' || O.COD_OUTRA || ' - ' ||
C.NOME_CLI
FROM ITENS_OUTRAS_SAIDAS I
INNER JOIN OUTRAS_SAIDAS O
ON (I.COD_OUTRA = O.COD_OUTRA)
INNER JOIN CLIENTE C
ON (O.COD_CLI = C.COD_CLI)
INNER JOIN TIPO_ES TP
ON (O.COD_ES = TP.COD_ES)
WHERE O.DATA_OUTRA >= :DATAINI AND I.COD_PRO = :CODPRO
AND I.COD_EMP = :CODEMP AND I.CANCELADO = 0
AND TP.controla_estoque = 'S'
ORDER BY O.DATA_OUTRA
INTO :COD_EMP, :QUANT, :DATA, :TIPO, :HISTORICO
DO
SUSPEND;
END
END
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)