Clipper On Line • Ver Tópico - Custo do produto baseado nas últimas compras

Custo do produto baseado nas últimas compras

Discussão sobre SQL

Moderador: Moderadores

 

Custo do produto baseado nas últimas compras

Mensagempor JoséQuintas » 06 Set 2021 20:19

Acho que não dá pra fazer de outro jeito, por um SELECT único por exemplo, ou dá?

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Custo do produto baseado nas últimas compras

Mensagempor Ana Mitoooo » 06 Set 2021 21:49

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
Ana Mitoooo
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 82
Data de registro: 17 Out 2018 10:00
Cidade/Estado: Sobradinho/DF
Curtiu: 41 vezes
Mens.Curtidas: 36 vezes

Custo do produto baseado nas últimas compras

Mensagempor JoséQuintas » 07 Set 2021 11:48

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Custo do produto baseado nas últimas compras

Mensagempor JoséQuintas » 07 Set 2021 13:49

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 ?

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro