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
Eduardo Haag

Eduardo Haag

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


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
Então avalie ter uma rotina específica para obter o custo médio e gravá-lo num campo do cadastro/estoque do produto, e extraia dali para os relatórios.

Emerson Nascimento

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;

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:

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar