GERAR BAIXA ESTOQUE COM RECURSIVIDADE

FFECHER 05/09/2015 18:39:09
#451062
Boa noite
Estou com problema classico mas meu tempo esta se esgotando e nao to conseguindo resolver estou desenvolvendo um sistema de produção onde os produtos possuem sua estrutura dentro dessa estrutura podem existir outros sub produtos com suas estruturas Ex produzo tampa shampoo sendo uma tampa e composta por tres sub tampas sendo que duas dessas subtampas sao compostas por outros sub produtos.
Para eu produzir 500 tampas shampoo preciso baixar estoque de todos esses sub produtos e suas materias primas.
Alguem pode me ajudar ?
Grato
Fernando
KERPLUNK 05/09/2015 18:52:44
#451063
O que você está fazendo se chama romaneio e pode ser bastante complexo. Geralmente, se usa uma tabela com a estrutura:






ProdutoComponenteQuantidade
24351
24430,50
25812
39355

Nesse caso, se fossemos dar baixa no produto de código 24, faríamos a seleção na tabela de romaneios procurando pelo produto 24 e dando baixa em todos os produtos que o compõem, sendo que o processo de baixa de componentes, é o mesmo que o anterior, ou seja, ele também vai percorrer a tabela de romaneios e baixar o que tiver que baixar e assim sucessivamente. Para isso, crie uma function ou sub que chame ela mesma para fazer a baixa, assim:

Sub BaixarProduto(codigo)
(conecta no banco)
(selecionar na tabela de romaneios o produto [Ô]codigo[Ô])
(fazer um loop nessa tabela e chamar BaixarProduto(codigo) para cada produto encontrado)
End Sub
FFECHER 05/09/2015 19:37:57
#451065
Boa noite amigo: Preciso criar uma baixa de estoque:
quando requisito 500 tampas xpto preciso saber o que consome essa tampa na estrutura dela :
a estrutura dela e composta de 1 sub tampa x, 1 sub tampa y, 0,0004 caixa papelao
a sub tampa x e composta de uma outra subtampa z e outra subtampa t e cada subtampa tem seu consumo de master e resina.
entao quando eu produzir 500 tampas
preciso saber quanto de master e resina preciso requisitar para cada subtampa


KERPLUNK 05/09/2015 20:07:09
#451067
Pois é, você consegue fazer isso do modo que te falei
FFECHER 05/09/2015 21:21:49
#451070
Private Sub Command1_Click()
a = baixarproduto(1)

End Sub

Private Function baixarproduto(produto) As Integer

estrutura.RecordSource = [Ô]SELECT * FROM estrutura where idproduto=[Ô] & produto
estrutura.Refresh
While Not estrutura.Recordset.EOF
MsgBox (estrutura.Recordset([Ô]idmat[Ô]))
a = baixarproduto(estrutura.Recordset([Ô]idmat[Ô]))
estrutura.Recordset.MoveNext


Wend
End Function
nao faz o que imaginava




KERPLUNK 05/09/2015 22:02:25
#451074
E o que acontece? Não baixa nenhum? Não acha nenhum?
FFECHER 06/09/2015 00:36:38
#451082
baixa dois primeiros depois da eof
KERPLUNK 06/09/2015 01:47:04
#451086
Ao invés de usar o mesmo recordset, experimente usar um recordset separado.
FFECHER 06/09/2015 09:08:25
#451087
Nao entendi
KERPLUNK 06/09/2015 14:42:13
#451089
Resposta escolhida
O objeto [Ô]estrutura[Ô], é um recordset que você está só atualizando com uma query diferente toda a vez que entra na rotina. Dentro da rotina crie um outro recordset:

Dim rs as new recordset
rs.Open [Ô]select xxxxx[Ô]
.....
FFECHER 06/09/2015 18:06:51
#451090
Nao posso encerrar antes de agradecer muito obrigado funcionou.http://www.vbmania.com.br/index.php?modulo=forum&metodo=encerrar&id=451062
Tópico encerrado , respostas não são mais permitidas