ID: enum_IDHelp_RelatCurvaABCFornecedor
Versão:
Nome: Relatório de curva ABC de compra por fornecedor (Relatórios/Fornecedor/Curva ABC de Compra por Fornecedor)
Objetivo:
O objetivo do relatório é obter uma lista de todas as compras efetuadas por cada fornecedor sendo que será mostrado o fornecedor com maior volume de compras como o primeiro da lista seguidos pelos fornecedores com menor compra em ordem decrescente. A finalidade é avaliar o volume de compra em relação ao resultado obtido dos produtos comprados do fornecedor.
O relatório se divide em 2 modelos: Sintético e Analítico com análise de venda, onde:
Sintético: Ao gerar este modelo será mostrado a lista de fornecedores com sua maior compra dentro dos filtros.
Analítico com análise de venda: Ao gerar este modelo será mostrado a lista de fornecedores com sua maior compra dentro dos filtros, o valor de custo e valor de venda das mercadorias deste fornecedor neste período observando os filtros.
Filtros aplicados na geração do relatório
Filtro de dada: Especificação de data inicial e data final para geração dos dados.
Limite de registro: Com a apuração das compras dos fornecedores no período, é possível indicar um limite de registro a ser visualizado no relatório onde será exibido os dados até a quantidade de linhas especificadas sendo do maior valor de compra para o menor valor de compras.
Obter o custo da entrada através de: Esta opção define como é apurado o custo da compra dos fornecedores observando as opções e suas especificações
Custo do item da nota: Nesta opção o custo do item é o valor final do produto, observando os encargos da nota fiscal conhecido na estrutura do sistema como valor contábil que é o valor obtido em cada linha da nota que somando chega ao valor líquido da nota fiscal.
Custo comercial do item da nota: Para esta configuração será aplicado o custo comercial que é o custo final para obtenção da mercadoria levando em conta as tributações de entrada multiplicado pela quantidade de itens nota fiscal.
Ignorar transferência na entrada: Caso esta opção esteja marcada o sistema não irá tratar transferência de entrada como compra não jogando o fornecedor das notas de transferência no processamento.
Fornecedor: Neste campo o usuário indica qual fornecedor deseja usar para obter os dados caso queira emitir o relatório para um fornecedor específico. Caso não seja informado nenhum fornecedor o relatório será emitido para todos os fornecedores que tiveram compras dentro do período especificado.
Origem da análise das saídas: Este item indica de onde será obtido o valor de custo da mercadoria no processamento das saídas que podem ser de duas formas:
Documento da venda: Quanto esta opção esta marcada, indica que o valor de custo da venda será obtido nos valore registrados no ato da venda.
Cadastro de produto: Caso esta opção esteja marcada, o sistema deverá processar os custos da venda baseando-se nos valores de custo pelos valores contidos no cadastro de produto no momento da geração do relatório.
Valores para custo: Este tópico indica qual campo de valor de custo será utilizado para apuração do custo da venda levando em conta o documento ou cadastro do produto conforme configuração anterior onde as possiblidades são:
Custo Médio: Custo médio da mercadoria
Custo Comercial: Valor de custo comercial da mercadoria que é o valor de custo da compra mais os valores necessários para se ter o produto no estoque em condição de venda, ou seja, com mais frete e qualquer outro encargo.
Preço de custo: Preço de custo do produto
Custo Final: Este item corresponde ao custo final do produto que seria o valor de custo somado a todos os custos de operação e impostos necessários para efetuar a venda do produto, também conhecido como markup do produto.
Lojas: Nesta interface é possível selecionar as lojas que serão utilizadas nos filtros para apuração de compra e venda podendo ser uma ou mais lojas.
Documentos: Nesta interface é possível indicar os documentos que serão utilizados no processamento de venda. Deve-se observar que pode ser analisado o processo de faturamento de cada documento para identificar se o documento foi processado no financeiro ou não.
Modelo de DAV: Nesta interface é possível selecionar os modelos de DAVs que serão utilizados para análise de venda como é o caso de Pedido ou Entrega.
Consultas executadas no banco de dados
Obtenção das entradas
select nf.codigocf, subnf.codigoproduto, fornecedor.nomerazaosocial, ((subnf.quantidade subnf.ic) dadosproduto.custocomercial) as ValorCompra, (0) as ValorCustoVenda, (0) as ValorVenda, (0) as Processar From nf inner join fornecedor on fornecedor.codigo = nf.codigocf inner join subnf on subnf.codigonf = nf.codigo inner join cfop on cfop.codigo = nf.codigocfop inner join dadosproduto on (dadosproduto.codigoproduto = subnf.codigoproduto and dadosproduto.codigoloja = nf.codigoloja) Where ((nf.DataEntrada BETWEEN '2023-01-01' AND '2023-07-12') and nf.codigoloja in(2, 6, 8, 1, 5, 7, 4) and nf.tipo =0 and nf.cancelada = 'Não' and cfop.transferencia = 'Não')
Para cada linha de fornecedor é processado as seguintes consultas para cada fornecedor e documento:
Cupom Fiscal
Select sum(itemcupom.quantidade*itemcupom.customedio) as ValorTotal, sum(itemcupom.ValorContabel) as ValorVenda from cupom inner join itemcupom on itemcupom.codigocupom = cupom.codigo inner join produto on produto.codigo = itemcupom.codigoproduto inner join dadosproduto on dadosproduto.codigoproduto = itemcupom.codigoproduto AND dadosproduto.codigoloja = cupom.codigoloja Where ((cupom.Data BETWEEN '2023-01-01' and '2023-07-03') and cupom.codigoloja in(2, 6, 8, 1, 5, 7, 4) and produto.codigofornecedorp = 1)
DAV(s)
Select sum(subdav.quantidade*subdav.customedio) as Custo, (sum(subdav.vlrtotal - (subdav.vlrtotal (dav.pdesconto / 100)) + (subdav.vlrtotal (dav.pacrescimo / 100)))) as Venda from dav inner join modelodav on modelodav.codigo = dav.codigomodelodav LEFT JOIN faturamento ON faturamento.codigoorigem = dav.codigo and faturamento.codigomodelo = dav.codigomodelodav AND faturamento.tipoorigem = 0 inner join subdav on subdav.codigodav = dav.codigo and subdav.codigomodelodav = dav.codigomodelodav inner join produto on produto.codigo = subdav.codigoproduto inner join dadosproduto on dadosproduto.codigoproduto = subdav.codigoproduto and dadosproduto.codigoloja = dav.codigoloja Where ((dav.data BETWEEN '2023-01-01' and '2023-07-03') and dav.codigoloja in(2, 6, 8, 1, 5, 7, 4) and dav.cancelado = 'Não' and produto.codigofornecedorp = 1 and dav.codigomodelodav in(3, 11, 20, 13, 12, 4, 16, 14, 8, 17, 2, 10, 1, 18, 7, 9, 5, 15) and dav.Concluido = 'Sim')
Nota Fiscal de Saída
Select sum(subnf.quantidade*if(nf.NFe_Complementar<>3,subnf.CustoMedio,subnf.CustoMedio*-1)) as Custo, (sum(if(nf.NFe_Complementar<>3, subnf.ValorContabil,subnf.ValorContabil*-1))) as Venda from nf inner join subnf on subnf.codigonf = nf.codigo inner join produto on produto.codigo = subnf.codigoproduto inner join dadosproduto on dadosproduto.codigoproduto = subnf.codigoproduto and dadosproduto.codigoloja = nf.codigoloja Where ((nf.dataemissao BETWEEN '2023-01-01' AND '2023-07-03') and nf.status not in(6,9,10) and nf.cancelada = 'Não' and nf.tiponf = 1 and nf.codigoloja IN (2, 6, 8, 1, 5, 7, 4) and produto.codigofornecedorp = 1 and nf.faturada = 'Sim')
DAV de devolução
Select sum(subdav.quantidade*subdav.customedio) as Custo, (sum(subdav.vlrtotal-(subdav.vlrtotal*(dav.vlrdesconto/100))+(subdav.vlrtotal*(dav.vlracredimo/100)))) as Venda 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 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 ((dav.data BETWEEN '2023-01-01' and '2023-07-03') and dav.codigomodelodav in(3, 11, 20, 13, 12, 4, 16, 14, 8, 17, 2, 10, 1, 18, 7, 9, 5, 15) and dav.codigoloja in(2, 6, 8, 1, 5, 7, 4) and modelodav.Nat_DAV = 4 and dav.cancelado = 'Não' and dav.concluido = 'Sim' and produto.codigofornecedorp = 1)
NFCE
Select sum(subnfce.quantidade*subnfce.CustoMedio) as Custo, sum(subnfce.ValorContabil) as venda from nfce inner join subnfce on subnfce.codigonfce = nfce.codigo 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 ((nfce.dataemissao BETWEEN '2023-01-01' and '2023-07-03') and nfce.status not in(2, 5, 8, 9) AND nfce.cancelada = 'Não' AND nfce.codigoempresa in(2, 6, 8, 1, 5, 7, 4) AND produto.codigofornecedorp = 1 and IFNULL(faturamento.Codigo, '') <> '')
Nota Fiscal Série D
Select sum(subnfseried.quantidade*subnfseried.CustoMedio) as Custo, sum(subnfseried.valortotal) as Venda from nfseried inner join subnfseried on subnfseried.codigonfseried =
nfseried.codigo 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 ((nfseried.dataemissao BETWEEN '2023-01-01' AND '2023-07-03') AND nfseried.cancelada = 'Não' AND nfseried.codigoloja in(2, 6, 8, 1, 5, 7, 4)and IFNULL(faturamento.Codigo, '') <> '')
Nota Fiscal de Devolução de Cliente
Select sum(subnf.quantidade*if(nf.NFe_Complementar<>3, subnf.CustoMedio*-1, subnf.CustoMedio)) as Custo, (sum(subnf.ValorContabil*-1)) as Venda from nf INNER JOIN subnf on subnf.codigonf = nf.codigo 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 ((if(nf.TransmissaoPropria='Sim', nf.dataemissao,nf.DataEntrada) BETWEEN '2023-01-01' AND '2023-07-03') and nf.status not in(6,9,10) and nf.cancelada = 'Não' and nf.tiponf = 2 and nf.codigoloja IN (2, 6, 8, 1, 5, 7, 4) and produto.codigofornecedorp = 1 and IFNULL(faturamento.Codigo, '') <> '')
DAV de Ordem de Serviço
Select sum(subordemservicocs.quantidade*subordemservicocs.customedio) as Custo, (sum(subordemservicocs.valortotal - (subordemservicocs.valortotal (ordemservicocs.pdesconto / 100)) + (subordemservicocs.valortotal (ordemservicocs.pacrescimo / 100)))) as Venda 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 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 ((ordemservicocs.DATA BETWEEN '2023-01-01' AND '2023-07-03') AND ordemservicocs.codigoloja in(2, 6, 8, 1, 5, 7, 4) AND ordemservicocs.
codigomodelodav in(3, 11, 20, 13, 12, 4, 16, 14, 8, 17, 2, 10, 1, 18, 7, 9, 5, 15) AND IFNULL(faturamento.codigo, '') <> '')
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.