ID: enum_IDHelp_RelatComparativoCompraVendaFornecedor
Versão:
Nome: Comparativo de compra e venda por fornecedor (Relatórios/Fornecedor/Comparativo de compra e venda por fornecedor)
Objetivo: Efetuar a análise das vendas de produtos comprados de um determinado fornecedor produto a produto observando as quantidades
Filtros dos relatórios: O relatório possui os seguintes filtros:
Filtro de Data: Especificação de data inicial e data final para geração dos dados, as datas que serão filtradas é a data e hora do processamento de quantitativo do estoque, pois em situações específicas podem não coincidir com a data do documento.
Fornecedor: Especificar qual fornecedor será analisado no período.
Ignorar transferência na entrada e saída: Indica que na consulta a ser feita nas notas de saída, será ignorado documentos de transferência de estoque entre matriz e filial.
Lojas: Nesta interface é possível selecionar as lojas que serão utilizadas nos filtros para apuração das compras e vendas. Pode ser selecionada uma ou mais lojas.
Documentos: Nesta interface é possível indicar os documentos que serão utilizados no processo de venda. Deve-se observar que pode ser analisado o processo de faturamento de cada documento para indicar se o documento foi processado financeiro ou não.
Modelo de DAV: Nesta interface é possível selecionar os modelos de DAV(s) que serão utilizados para análise de venda como é o caso de Pedido de Entrega caso nas opções de documento tenha sido marcado o DAV.
Consultas Executadas no banco de dados
Para se obter os registros a serem processados é executado o Query
Obtendo as entradas
select nf.codigocf, subnf.codigoproduto, (historicoproduto.entrada) as Entrada From nf inner join fornecedor on fornecedor.codigo = nf.codigocf inner join subnf on subnf.codigonf = nf.codigo inner join historicoproduto on historicoproduto.codigoorigem = subnf.codigo and historicoproduto.tipoorigem = 5 inner join cfop on cfop.codigo = nf.codigocfop Where ((historicoproduto.DataHora BETWEEN '2023-01-01 00:00:00' AND '2023-07-01 23:59:59') and nf.codigoloja in(1, 2, 4, 5, 6, 7, 8) and nf.tipo =0 and nf.cancelada = 'Não' and nf.codigocf = 309)
Para cada linha de fornecedor é processado as seguintes consultas para cada fornecedor e documento:
Processamento de saldo anterior
select sum(historicoproduto.Entrada - historicoproduto.Saida) As SaldoAnterior From historicoproduto inner join cadastroestoque on cadastroestoque.codigo = historicoproduto.codigoestoque where (historicoproduto.CodigoProduto = 1530 and cadastroestoque.CodigoEL in(1, 2, 4, 5, 6, 7, 8) and historicoproduto.datahora < '2023-01-01 00:00:00')
Cupom Fiscal
Select sum(itemcupom.quantidade) as Saida from cupom inner join itemcupom on itemcupom.codigocupom = cupom.codigo inner join historicoproduto on (historicoproduto.codigoorigem = itemcupom.codigo and historicoproduto.tipoorigem = 9) inner join produto on produto.codigo = itemcupom.codigoproduto inner join dadosproduto on dadosproduto.codigoproduto = itemcupom.codigoproduto AND dadosproduto.codigoloja = cupom.codigoloja Where ((historicoproduto.DataHora BETWEEN '2023-01-01 00:00:00' and '2023-07-01 23:59:59') and cupom.codigoloja in(1, 2, 4, 5, 6, 7, 8) and itemcupom.codigoproduto = 1530)
DAV(S)
Select sum(subdav.quantidade) as Saida from dav inner join modelodav on modelodav.codigo = dav.codigomodelodav inner join subdav on subdav.codigodav = dav.codigo and subdav.codigomodelodav = dav.codigomodelodav INNER JOIN historicoproduto on (historicoproduto.codigoorigem = subdav.codigo and historicoproduto.tipoorigem = 10) LEFT JOIN faturamento ON faturamento.codigoorigem = dav.codigo and faturamento.codigomodelo = dav.codigomodelodav AND faturamento.tipoorigem = 0 inner join produto on produto.codigo = subdav.codigoproduto inner join dadosproduto on dadosproduto.codigoproduto = subdav.codigoproduto and dadosproduto.codigoloja = dav.codigoloja Where ((historicoproduto.datahora BETWEEN '2023-01-01 00:00:00' and '2023-07-01 23:59:59') and dav.codigoloja in(1, 2, 4, 5, 6, 7, 8) and dav.cancelado = 'Não' and subdav.codigoproduto = 1530 and dav.codigomodelodav in(3, 11, 13, 12, 16, 14, 8, 7, 9, 15))
Nota Fiscal de Saída
Select sum(if(nf.NFe_Complementar<>3,subnf.quantidade,subnf.quantidade*-1)) as Saida from nf inner join subnf on subnf.codigonf = nf.codigo inner join historicoproduto on (historicoproduto.codigoorigem = subnf.codigo and historicoproduto.tipoorigem = 2) inner join produto on produto.codigo = subnf.codigoproduto inner join dadosproduto on dadosproduto.codigoproduto = subnf.codigoproduto and dadosproduto.codigoloja = nf.codigoloja Where ((historicoproduto.datahora BETWEEN '2023-01-01 00:00:00' AND '2023-07-01 23:59:59') and nf.status not in(6,9,10) and nf.cancelada = 'Não' and nf.tiponf = 1 and nf.codigoloja IN (1, 2, 4, 5, 6, 7, 8) and subnf.codigoproduto = 1530)
DAV de devolução
Select sum(subdav.quantidade*-1) as Saida from dav INNER JOIN modelodav ON modelodav.codigo = dav.codigomodelodav inner join subdav on subdav.codigodav = dav.codigo and subdav.codigomodelodav = dav.codigomodelodav inner join historicoproduto on (historicoproduto.codigoorigem = subdav.codigoorigem and historicoproduto.tipoorigem = 10) inner join produto on produto.codigo = subdav.codigoproduto inner join dadosproduto on dadosproduto.codigoproduto = subdav.codigoproduto and dadosproduto.codigoloja = dav.codigoloja LEFT JOIN faturamento ON faturamento.codigoorigem = dav.codigo and faturamento.codigomodelo = dav.codigomodelodav AND faturamento.tipoorigem = 0 Where ((historicoproduto.datahora BETWEEN '2023-01-01 00:00:00' and '2023-07-01 23:59:59') and dav.codigomodelodav in(3, 11, 13, 12, 16, 14, 8, 7, 9, 15) and dav.codigoloja in(1, 2, 4, 5, 6, 7, 8) and subdav.codigoproduto = 1530 and modelodav.Nat_DAV = 4 and dav.cancelado = 'Não')
NFC-e
Select sum(subnfce.quantidade) as Saida from nfce inner join subnfce on subnfce.codigonfce = nfce.codigo inner join historicoproduto on (historicoproduto.codigoorigem = subnfce.codigo and historicoproduto.tipoorigem = 26) inner join produto on produto.codigo = subnfce.codigoproduto inner join dadosproduto on dadosproduto.codigoproduto = subnfce.codigoproduto and dadosproduto.codigoloja = nfce.codigoempresa left join faturamento on (faturamento.codigoorigem = nfce.codigo and faturamento.tipoorigem = 17) Where ((historicoproduto.datahora BETWEEN '2023-01-01 00:00:00' and '2023-07-01 23:59:59') and nfce.status not in(2, 5, 8, 9) AND nfce.cancelada = 'Não' AND nfce.codigoempresa in(1, 2, 4, 5, 6, 7, 8) AND subnfce.codigoproduto = 1530)
Nota Fiscal Série D
Select sum(subnfseried.quantidade) as Saida from nfseried inner join subnfseried on subnfseried.codigonfseried = nfseried.codigo inner join historicoproduto on (historicoproduto.codigoorigem = subnfseried.codigo and historicoproduto.tipoorigem = 6) inner join produto on produto.codigo = subnfseried.codigoproduto inner join dadosproduto on dadosproduto.codigoproduto = subnfseried.codigoproduto and dadosproduto.codigoloja = nfseried.codigoloja LEFT JOIN faturamento on (faturamento.codigoorigem = nfseried.codigo and faturamento.tipoorigem = 4) Where ((historicoproduto.datahora BETWEEN '2023-01-01 00:00:00' AND '2023-07-01 23:59:59') AND nfseried.cancelada = 'Não' AND nfseried.codigoloja in(1, 2, 4, 5, 6, 7, 8) and subnfseried.codigoproduto = 1530)
Nota Fiscal de devolução de cliente
Select sum(if(nf.NFe_Complementar<>3,subnf.quantidade*-1, subnf.quantidade)) as Saida from nf INNER JOIN subnf on subnf.codigonf = nf.codigo INNER JOIN historicoproduto on (historicoproduto.codigoorigem = subnf.codigo and historicoproduto.tipoorigem = 3) INNER JOIN produto on produto.codigo = subnf.codigoproduto INNER JOIN dadosproduto on dadosproduto.codigoproduto = subnf.codigoproduto and dadosproduto.codigoloja = nf.codigoloja LEFT JOIN faturamento ON (faturamento.codigoorigem = nf.codigo AND faturamento.tipoorigem = 12) Where ((historicoproduto.datahora BETWEEN '2023-01-01 00:00:00' AND '2023-07-01 23:59:59') and nf.status not in(6,9,10) and nf.cancelada = 'Não' and nf.tiponf = 2 and nf.codigoloja IN (1, 2, 4, 5, 6, 7, 8) and subnf.codigoproduto = 1530)
DAV de Ordem de Serviço
Select sum(subordemservicocs.quantidade) as Saida FROM ordemservicocs INNER JOIN modelodav on modelodav.codigo = ordemservicocs.codigomodelodav INNER JOIN subordemservicocs on subordemservicocs.codigoos = ordemservicocs.codigo and subordemservicocs.codigomodelodav = ordemservicocs.codigomodelodav INNER JOIN historicoproduto on (historicoproduto.codigoorigem = subordemservicocs.codigo and historicoproduto.tipoorigem = 19) INNER JOIN produto on produto.codigo = subordemservicocs.codigops INNER JOIN dadosproduto on dadosproduto.codigoproduto = subordemservicocs.codigops and dadosproduto.codigoloja = ordemservicocs.codigoloja LEFT JOIN faturamento ON faturamento.codigoorigem = ordemservicocs.codigo and faturamento.codigomodelo = ordemservicocs.codigomodelodav AND faturamento.tipoorigem = 0 Where ((historicoproduto.datahora BETWEEN '2023-01-01 00:00:00' AND '2023-07-01 23:59:59') AND ordemservicocs.codigoloja in(1, 2, 4, 5, 6, 7, 8) AND subordemservicocs.codigops = 1530 AND ordemservicocs.codigomodelodav in(3, 1
1, 13, 12, 16, 14, 8, 7, 9, 15))
Nota: As consultas SQL demonstradas acima sofrem alterações mediante aos filtros aplicados pelo usuário tendo de ser interpretadas para que seja possível identificar o resultado do relatório