MCDBA Brasil E-Book SQL Server 2000 Administração Básica   
11:56:15

 
 
MCDBA Brasil: Forums
 
 


 
  www.mcdbabrasil.com.br :: Exibir tópico - Calculo de Estoque em Stored Procedure
 FAQFAQ   PesquisarPesquisar   GruposGrupos   PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   LoginLogin 

Calculo de Estoque em Stored Procedure

 
Novo Tópico   Responder Mensagem    www.mcdbabrasil.com.br - Índice do Fórum -> Gerais
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
mfrade
Visitante
Visitante


Registrado em: Jan 08, 2006
Mensagens: 6
Localização: Brasil

MensagemEnviada: 17 Mar 2009 21:52    Assunto: Calculo de Estoque em Stored Procedure Responder com Citação

Estou desenvolvendo uma stored proc para efetuar o recalculo dos valores do estoque da minha empresa.

Preciso calculo o estoque dia a dia e atualizar os valores em uma tabela.

Exemplo

01/01 Produto X Entrada = 10 Saida = 5 Saldo = 5
02/02 Produto X Entrada = 0 Saida = 2 Saldo = 3

Assim por diante.

Tenho 12.000 itens e preciso efetuar para todos eles.

Atualmente estou utilizando Cursor para isso , mais a performance e muito ruim.


Alguem tem alguma sugestao para ganho de performance
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Endereço de AIM MSN Messenger
lfbraz
Doutor no assunto
Doutor no assunto


Registrado em: Mar 26, 2007
Mensagens: 132
Localização: São Paulo/SP

MensagemEnviada: 18 Mar 2009 07:30    Assunto: Responder com Citação

Existem métodos de substituição de cursores por estruturas mais rápidas (com WHILE) caso ele seja realmente necessário. No entanto, talvez não seja necessário você correr linha a linha para este cálculo ...

Existem estes campos em uma tabela ( Data,Produto,Entrada,Saida,Saldo ) ??

O cálculo está sendo feito com base nos campos de uma só tabela ou são vários cálculos ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
mfrade
Visitante
Visitante


Registrado em: Jan 08, 2006
Mensagens: 6
Localização: Brasil

MensagemEnviada: 18 Mar 2009 10:20    Assunto: Responder com Citação

A estrutura da Tabela é:

produto
Data
entrada
saida
saldo = entrada - saida
saldo_acumulado - saldo_acumulado anterior - saldo do dia


Todos os calculos são efetuados em cima de uma unica tabela.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Endereço de AIM MSN Messenger
lfbraz
Doutor no assunto
Doutor no assunto


Registrado em: Mar 26, 2007
Mensagens: 132
Localização: São Paulo/SP

MensagemEnviada: 18 Mar 2009 10:26    Assunto: Responder com Citação

Então você pode simplesmente atualizar o campo que você quer fazendo tudo num unico comando :

Exemplo :
UPDATE Tabela SET saldo = entrada - saida ,
saldo_acumulado = saldo_acumulado anterior - saldo do dia

Para o Saldo Acumulado anterior você pode fazer no próprio Update uma subquery retornando o Saldo do dia anterior ....
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joliveira
PhD no assunto
PhD no assunto


Registrado em: Sep 12, 2005
Mensagens: 718
Localização: São José ods Campos/SP

MensagemEnviada: 18 Mar 2009 11:07    Assunto: Responder com Citação

O seu saldo acumulado anterior seria o saldo referente à ultima data que o produto teve movimentação antrior a data atual?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
mfrade
Visitante
Visitante


Registrado em: Jan 08, 2006
Mensagens: 6
Localização: Brasil

MensagemEnviada: 18 Mar 2009 12:13    Assunto: Responder com Citação

O processo atual esta sendo efetuado assim:

Calculo de uma unica vez o saldo do DIA

O Acumulado eu estou fazendo utilizando um cursor produto a produto. São 10.4000

Então eu pego um Produto , Vou no primeiro dia de vida dela e inicio o calculo do acumulado.

O Meu problema é como atualizar esse valor do acumulado . sendo que ele é calculo na hora .
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Endereço de AIM MSN Messenger
joliveira
PhD no assunto
PhD no assunto


Registrado em: Sep 12, 2005
Mensagens: 718
Localização: São José ods Campos/SP

MensagemEnviada: 18 Mar 2009 14:13    Assunto: Responder com Citação

Voce pode usar Common Table Expression para calcular o saldo acumulado e fazer o update
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
mfrade
Visitante
Visitante


Registrado em: Jan 08, 2006
Mensagens: 6
Localização: Brasil

MensagemEnviada: 18 Mar 2009 16:41    Assunto: Responder com Citação

JOliveira , não conheço CTE

Pequisei no google e verifiquei que ela é para SQL 2005. O Meu é 2000.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Endereço de AIM MSN Messenger
mfrade
Visitante
Visitante


Registrado em: Jan 08, 2006
Mensagens: 6
Localização: Brasil

MensagemEnviada: 18 Mar 2009 21:26    Assunto: Responder com Citação

o que pode estar errado nesse comando:

Não esta alterando as informações

update A
set A.SALDO = A.Saldo_dia + ( select isnull(c.Saldo,0) from #Temp_estoque c where c.Dta_movimento = a.Dta_movimento -1 )
from #Temp_estoque A
where 1 = 1
AND Saldo_dia <> 0
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Endereço de AIM MSN Messenger
lfbraz
Doutor no assunto
Doutor no assunto


Registrado em: Mar 26, 2007
Mensagens: 132
Localização: São Paulo/SP

MensagemEnviada: 19 Mar 2009 08:28    Assunto: Responder com Citação

mfrade, este 1 = 1 não é necessário, você poderia tirar ...
Qto a data (campo Dta_movimento) ela esta em formato SMALLDATETIME (ou DATETIME) sem a informação das horas ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
mfrade
Visitante
Visitante


Registrado em: Jan 08, 2006
Mensagens: 6
Localização: Brasil

MensagemEnviada: 19 Mar 2009 17:53    Assunto: Responder com Citação

Os campos estão com Somente data

o comando esta asssim:

update A
set A.SALDO = A.Saldo_dia + ( select isnull(c.Saldo,0) from #Temp_estoque c
where convert(varchar(12),c.Dta_movimento,112) = convert(varchar(12),a.Dta_movimento -1,112) )
from #Temp_estoque A
where Saldo_dia <> 0

o resultado esta:

dta_movimento COD_LOJA COD_PRODUTO ENTRADAS Saidas Saldo_Dia SALDO
2009-03-02 00:00:00.000 3 00297189 72 61 11 34
2009-03-03 00:00:00.000 3 00297189 60 48 12 12
2009-03-04 00:00:00.000 3 00297189 60 36 24 24


o correto seria

dta_movimento COD_LOJA COD_PRODUTO ENTRADAS Saidas Saldo_Dia SALDO
2009-03-02 00:00:00.000 3 00297189 72 61 11 34
2009-03-03 00:00:00.000 3 00297189 60 48 12 34+12=46
2009-03-04 00:00:00.000 3 00297189 60 36 24 46+24=70

e assim por diante. O saldo tem que ser o saldo do anterior + saldo do Dia

Valeu mesmo pela força
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Endereço de AIM MSN Messenger
lfbraz
Doutor no assunto
Doutor no assunto


Registrado em: Mar 26, 2007
Mensagens: 132
Localização: São Paulo/SP

MensagemEnviada: 20 Mar 2009 09:27    Assunto: Responder com Citação

Veja se é isto que você quer ...

update A
set A.SALDO = A.Saldo_dia +
( SELECT SUM(Saldo)
FROM #temp_estoque C
WHERE c.Dta_movimento < a.Dta_movimento
and c.cod_loja = a.cod_loja and c.cod_produto = a.cod_produto )
from #Temp_estoque A
where Saldo_dia <> 0
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    www.mcdbabrasil.com.br - Índice do Fórum -> Gerais Todos os horários são GMT - 3 Hours
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.

Powered by phpBB 2.0.6 © 2001 phpBB Group
phpBB port v2.1 based on Tom Nitzschner's phpbb2.0.6 upgraded to phpBB 2.0.4 standalone was developed and tested by:
ArtificialIntel, ChatServ, mikem,
sixonetonoffun and Paul Laudanski (aka Zhen-Xjell).

Version 2.1 by Nuke Cops © 2003 http://www.nukecops.com

 
 


 
  Todas os logotipos e marcas registradas são de propriedade de seus respectivos donos.
Sistema de portais PHP-Nuke. Copyright © 2003. PHP-Nuke é um Software Livre liberado sob licença GNU/GPL.
Tempo para gerar esta página: 0.453 segundos