Página 1 de 1

Custo do produto baseado nas últimas compras

Enviado: 06 Set 2021 20:19
por JoséQuintas
Acho que não dá pra fazer de outro jeito, por um SELECT único por exemplo, ou dá?

Código: Selecionar todos

CREATE PROCEDURE ze_ProdutoCustoContabil( nIdProduto INT(11) )

BEGIN

DECLARE nQtde, nValor, nThisValor, nThisQtde, nQtdResta, nSaldoQtde, nSaldoValor DECIMAL(16,4) DEFAULT 0;
DECLARE dDatLan DATE;
DECLARE cReacao VARCHAR(50);
DECLARE nIdEstoque INT(11) DEFAULT 0;
DECLARE nCursorEOF INT(11) DEFAULT 0;
DECLARE SP_CURSOR CURSOR FOR
   SELECT
   IDESTOQUE, ESDATLAN, ESQTDE, ESVALOR, TRREACAO
   FROM JPESTOQUE
   LEFT JOIN JPTRANSACAO ON ESTRANSACAO = IDTRANSACAO
   WHERE ESPRODUTO = nIdProduto AND ESTIPLAN = '2'
   AND DATE( ESDATLAN ) > DATE( DATE_ADD( CURDATE(), INTERVAL -90 DAY ) )
   AND ESNUMDEP = '1' AND TRREACAO LIKE '%CUSCON%'
   ORDER BY ESDATLAN DESC, IDESTOQUE DESC LIMIT 100;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET nCursorEOF = 1;

SELECT
IEQTD1 + IEQTD2 + IEQTD3 + IEQTD4
INTO nQtdResta
FROM JPITEM
WHERE IDPRODUTO = nIdProduto;

OPEN SP_CURSOR;

THIS:WHILE nCursorEOF != 1 DO
   FETCH SP_CURSOR INTO nIdEstoque, dDatLan, nQtde, nValor, cReacao;
   SET nThisQtde   := LEAST( nQtdResta, nQtde );
   SET nThisValor  := nThisQtde * nValor;
   IF nQtdResta <= 0 THEN
      LEAVE THIS;
   END IF;
   SET nSaldoValor := nSaldoValor + nThisValor;
   SET nSaldoQtde  := nSaldoQtde + nThisQtde;
   SET nQtdResta   := nQtdResta - nThisQtde;
END WHILE;

CLOSE SP_CURSOR;

IF nQtdResta > 0 THEN
   SET nSaldoQtde  := nSaldoQtde + nQtdResta;
   SET nSaldoValor := nSaldoValor + ( nThisValor * nQtdResta );
END IF;

IF nSaldoQtde <= 0 THEN
   SET nSaldoValor := nThisValor;
END IF;
SELECT nSaldoValor / GREATEST( nSaldoQtde, 1 ) AS CUSTOCONTABIL;

END
O que a rotina faz?
Ela pega o saldo atual de produtos, e considera os valores das últimas entradas, até completar o saldo.

tipo tem 30 de saldo, as ultimas compras foram 20 e 20, pega 20 de uma nota pelo preço dessa nota e 10 da outra com o preço da outra.
Soma tudo e divide por 30. O resultado é o que foi pago por essa quantidade nas últimas compras, a média disso.
Acho que por SELECT sozinho complicaria, porque precisaria select de select, por causa da ordem, e sei lá mais o que.

Agora é só fazer outra, processando cada produto e chamando essa.

Estou começando a achar que, quando precisar disso em DBF, não vou mais saber fazer.
custocontabil.png
quase esqueci... divulgar valor de cliente pode ser problema. cobri um pouco o valor.
Ia até colocar nota a nota, pra ver de onde veio o valor mas... complica... porque ficaria claro que se trata de combustível.

Custo do produto baseado nas últimas compras

Enviado: 06 Set 2021 21:49
por Ana Mitoooo
Como ter lucro nas operações de Venda
Simulando em uma Planilha
CalcVenda.JPG
*Em se tratando de combustíveis (icms chega a até 33% no RJ) é necessário multiplicar o preço de custo em no mínimo 3x para começar a ter alguma lucratividade
**Quem quiser, fique a vontade para Ajustar/Adequar os cálculos que foram feitos por estimativa pessoal

Custo do produto baseado nas últimas compras

Enviado: 07 Set 2021 11:48
por JoséQuintas
Ana Mitoooo escreveu:*Em se tratando de combustíveis (icms chega a até 33% no RJ) é necessário multiplicar o preço de custo em no mínimo 3x para começar a ter alguma lucratividade
Depende, se o custo já inclui os impostos pagos antecipadamente, a margem não precisa incluir novamente os impostos.
Pelo menos aqui em SPaulo, as distribuidoras já cobram tudo antecipado.

Custo do produto baseado nas últimas compras

Enviado: 07 Set 2021 13:49
por JoséQuintas
A PROCEDURE durou pouco kkkkk

Hoje alterei pra FUNCTION.

Pra que perder tempo atualizando essa merd. a cada pedido, se pode fazer só na hora que precisar ?

Código: Selecionar todos

SELECT JPITEM.*, ze_ProdutoCustoContabil( 10 ) AS FUNCUSCON
Sei lá se vou mudar isso, mas usei o prefixo FUN pra indicar que vém de função.
Talvez altere depois pra CAL, indicando valor calculado.

Acho que vou fazer isso pra outras coisas também, como o último preço/última compra.