GARANTIR DESCONTO

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 |
Softsan Software

Softsan Software

Responder

Posts

02/08/2016

Devmedia

Olá,

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar