Calculo de preço de custo dentro da query SQL
22/12/2018
0
Olá, sou novo na comunidade e iniciante em programação.
Antes de expor minha duvida gostaria de dizer que pesquisei bastante a respeito e não consegui achar a solução.
Meu problema é o seguinte:
Estou trabalhando em um relatório que gera uma listagem de produtos que vendo e em uma das colunas deve constar o preço de custo do produto de acordo com os preços do materiais e quantidade de cada material utilizado.
Estou trabalhando em VB utilizando banco de dados access.
Problema está em fazer esse calculo do preço de custo direto na Query SQL.
No banco de dados exitem as tabelas Produtos, Composição e Materiais
Colunas:
Produtos: ID, Descrição, PreçoVenda, Peso
Materiais: ID, Descrição, PreçoCompra, Unidade...
Composição: ID, IdProduto, IdMaterial, Quantidade.
Precisaria que a consulta multiplicasse a quantidade de cada material utilizado para produzir o produto, pelo preço de compra do material e retornasse o valor total dos materiais utilizados.
Não sei se fui muito claro, mas espero que alguem consiga me ajudar.
Já agradeço de antemão
Antes de expor minha duvida gostaria de dizer que pesquisei bastante a respeito e não consegui achar a solução.
Meu problema é o seguinte:
Estou trabalhando em um relatório que gera uma listagem de produtos que vendo e em uma das colunas deve constar o preço de custo do produto de acordo com os preços do materiais e quantidade de cada material utilizado.
Estou trabalhando em VB utilizando banco de dados access.
Problema está em fazer esse calculo do preço de custo direto na Query SQL.
No banco de dados exitem as tabelas Produtos, Composição e Materiais
Colunas:
Produtos: ID, Descrição, PreçoVenda, Peso
Materiais: ID, Descrição, PreçoCompra, Unidade...
Composição: ID, IdProduto, IdMaterial, Quantidade.
Precisaria que a consulta multiplicasse a quantidade de cada material utilizado para produzir o produto, pelo preço de compra do material e retornasse o valor total dos materiais utilizados.
Não sei se fui muito claro, mas espero que alguem consiga me ajudar.
Já agradeço de antemão
Eduardo Haag
Curtir tópico
+ 0
Responder
Post mais votado
24/12/2018
Olá, sou novo na comunidade e iniciante em programação.
Antes de expor minha duvida gostaria de dizer que pesquisei bastante a respeito e não consegui achar a solução.
Meu problema é o seguinte:
Estou trabalhando em um relatório que gera uma listagem de produtos que vendo e em uma das colunas deve constar o preço de custo do produto de acordo com os preços do materiais e quantidade de cada material utilizado.
Estou trabalhando em VB utilizando banco de dados access.
Problema está em fazer esse calculo do preço de custo direto na Query SQL.
No banco de dados exitem as tabelas Produtos, Composição e Materiais
Colunas:
Produtos: ID, Descrição, PreçoVenda, Peso
Materiais: ID, Descrição, PreçoCompra, Unidade...
Composição: ID, IdProduto, IdMaterial, Quantidade.
Precisaria que a consulta multiplicasse a quantidade de cada material utilizado para produzir o produto, pelo preço de compra do material e retornasse o valor total dos materiais utilizados.
Não sei se fui muito claro, mas espero que alguem consiga me ajudar.
Já agradeço de antemão
Antes de expor minha duvida gostaria de dizer que pesquisei bastante a respeito e não consegui achar a solução.
Meu problema é o seguinte:
Estou trabalhando em um relatório que gera uma listagem de produtos que vendo e em uma das colunas deve constar o preço de custo do produto de acordo com os preços do materiais e quantidade de cada material utilizado.
Estou trabalhando em VB utilizando banco de dados access.
Problema está em fazer esse calculo do preço de custo direto na Query SQL.
No banco de dados exitem as tabelas Produtos, Composição e Materiais
Colunas:
Produtos: ID, Descrição, PreçoVenda, Peso
Materiais: ID, Descrição, PreçoCompra, Unidade...
Composição: ID, IdProduto, IdMaterial, Quantidade.
Precisaria que a consulta multiplicasse a quantidade de cada material utilizado para produzir o produto, pelo preço de compra do material e retornasse o valor total dos materiais utilizados.
Não sei se fui muito claro, mas espero que alguem consiga me ajudar.
Já agradeço de antemão
Normalmente se trabalha com custo médio. Porque você pode ter comprado o insumo em várias compras, de fornecedores diferentes, com preços diferentes e não saberia de qual delas o insumo foi consumido, logo o melhor é trabalhar com o custo médio.
Desta forma você pode calcular o custo médio por rotina específica semanalmente, quinzenalmente ou mensalmente (que são as formas mais comuns), ou pode fazer isso em tempo real, a cada compra de insumo ou produção (raro, somente em sistema bem sofisticados, como SAP). Isto também pode ser feito em rotinas de fechamento mensal (se a empresa trabalha desta forma), onde se faz o fechamento comercial, de estoque, contábil e fiscal.
Não sei se é possível fazer o cálculo numa única instrução SQL, porque sua estrutura de produtos pode ter vários níveis, e seria necessário recursividade para fazer o cálculo corretamente, o que torna o processo de cálculo bastante complexo.
PA1 | +-- PI1 | | | +----MO1 | | | +----MP1 | | | +----MP2 | | | +----PI2 | | | | | +---- MO2 | | | | | +---- MP1 | | | | | +---- MP3 | | | +----MP4 | +-- PI3 | +----MO3 | +----MP4 | +----MP5 | +----PI4 | +----MO1 | +----MP1 | +----PI5 | +----MO2 | +----PI5 | | | +----MO8 | | | +----MP2 | | | +----MP3 | +----PI6 | +----MO8 | +----MP4 | +----MP5
Emerson Nascimento
Responder
Mais Posts
24/12/2018
Ricardo Pestana
Bom dia,
Se isso não ajudar, posta o seu sql .... eu parti do principio que sua tabela base é "Composico" e que cada registro tem "obrigatoriamente" um idProduto e um idMaterial. Caso isso não seja verdade, e pode ocorrer de ter somente um deles vc precisa mudar para left join e provavelmente tratar o calculo para o caso deo preco de venda ser null.
select p.id, p.descricao, m.PrecoCompra, c.quantidade, (m.PrecoCompra * c.quantidade) PrecoCusto from Composição c
inner join materiais m on m.id = c.idMaterial
inner join produtos p on p.id = c.idProduto;
Se isso não ajudar, posta o seu sql .... eu parti do principio que sua tabela base é "Composico" e que cada registro tem "obrigatoriamente" um idProduto e um idMaterial. Caso isso não seja verdade, e pode ocorrer de ter somente um deles vc precisa mudar para left join e provavelmente tratar o calculo para o caso deo preco de venda ser null.
select p.id, p.descricao, m.PrecoCompra, c.quantidade, (m.PrecoCompra * c.quantidade) PrecoCusto from Composição c
inner join materiais m on m.id = c.idMaterial
inner join produtos p on p.id = c.idProduto;
Responder
26/12/2018
Alex Lekao
Oi Eduardo, bom dia!!!
Vamos lá, o ideal é não calcular custo no relatório, o relatório deve ser apenas para informar o custo do produto que foi calculado no processo de entrada ou fabricação/montagem do produto, o ideal eh que o custo do produto seja calculado por uma operação de lançamento ou composição/montagem.
Porque o cálculo no relatório não é interessante? pelo motivo colocado pelo Emerson(se não me engano ele quem informou.) porque tem a questão período de movimentação das composições e de composição do produto.
Por padrão os cadastros de produtos devem ter os preços de Custo Médio e Custo de Entrada ou de Reposição ou seja como preferir chamar, o custo médio leva em consideração as entradas e os estoques, tanto para a entrada dos materiais quanto as composições de produtos, pensando nisso você alimenta a base de dados e possibilita uma gama maior de informações para serem tratadas.
Sendo assim não precisara de calcular o custo no relatório, só informá-lo, caso queira ainda assim trazer o custo, sugiro que seja sempre baseado no ultimo custo dos materiais, somando o resultado do custo do material vezes a quantidade do material utilizado na composição.
Bom com relação ao relatório, eu sugiro utilizar o outer apply que tem se mostrado mais performático que o join, aqui nas consultas que tenho feito na empresa e dado maior possibilidade e flexibilidade de tratamento de resultados.
Minha sugestão de código seria conforme a seguir:
Precisa ser averiguado sobre essa questão e achar a melhor forma.
Espero ter ajudado.
Atenciosamente,
Alex
Vamos lá, o ideal é não calcular custo no relatório, o relatório deve ser apenas para informar o custo do produto que foi calculado no processo de entrada ou fabricação/montagem do produto, o ideal eh que o custo do produto seja calculado por uma operação de lançamento ou composição/montagem.
Porque o cálculo no relatório não é interessante? pelo motivo colocado pelo Emerson(se não me engano ele quem informou.) porque tem a questão período de movimentação das composições e de composição do produto.
Por padrão os cadastros de produtos devem ter os preços de Custo Médio e Custo de Entrada ou de Reposição ou seja como preferir chamar, o custo médio leva em consideração as entradas e os estoques, tanto para a entrada dos materiais quanto as composições de produtos, pensando nisso você alimenta a base de dados e possibilita uma gama maior de informações para serem tratadas.
Sendo assim não precisara de calcular o custo no relatório, só informá-lo, caso queira ainda assim trazer o custo, sugiro que seja sempre baseado no ultimo custo dos materiais, somando o resultado do custo do material vezes a quantidade do material utilizado na composição.
Bom com relação ao relatório, eu sugiro utilizar o outer apply que tem se mostrado mais performático que o join, aqui nas consultas que tenho feito na empresa e dado maior possibilidade e flexibilidade de tratamento de resultados.
Minha sugestão de código seria conforme a seguir:
SELECT ID, DESCRICAO, PRECOVENDA, PESO, PRDCOMP.CUSTO FROM PRODUTOS AS P OUTER APPLY (SELECT ID, IDPRODUTO, IDMATERIAL, M.PRECOCOMPRA*C.QUANTIDADE AS CUSTO, QUANTIDADE FROM COMPOSICAO AS C LEFT JOIN MATERIAIS AS M ON M.ID = C.IDMATERIAL WHERE 1=1 AND C.IDPRODUTO = P.ID) AS PRDCOMP
Precisa ser averiguado sobre essa questão e achar a melhor forma.
Espero ter ajudado.
Atenciosamente,
Alex
Responder
Clique aqui para fazer login e interagir na Comunidade :)