USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Fazer LOOP pra saida de materiais
CarlinhosBrown
ALTO PARAÍSO DE GOIAS
GO - BRASIL
Postada em 02/01/2007 10:23 hs            
Bom dia amigo, FELIZ ANO NOVO
 
o problema é o seguinte, to precisando fazer um codigo assim:
 
eu tenho uma tabela de entrada
NrProd    Descricao        Qtde        DtVal
10         AS infantil        800         01/01/07
10         AS infantil        200         01/02/07
10         AS infantil        300         01/03/07
 
essa tabela acima é d entrada, entao eu tenho 3 entrada do mesmo produto
 
Agora o problema vem aqui, quero dar saida em 1100 unidades, vcs viram q o estoque é 1300, mas nao tenho nenhum entrada de 1000, quero tirar os primeiros 800 da primeira entrada, depois dar um loop, tirar os 200 da segunda entrada, e por fim tirar 100 da terceira entrada....
 
To abrindo a tabela filtrando pelo NRPROD, ordenada pela data de validade, vejam o codigo q to tentando montar...
 
----------------------------------------------------------------------------------
        TabEntMat.CursorLocation = adUseServer
        TabEntMat.Open "Select Seq, qntdsaida, QntdSaldo, QuantCompra, NrMaterial, NomeBase, lote, Est, Fed, Mun, Org, Fabricante, Classe, Unid, NomeMaterial, Grupo, DataEntrada, lote From CadEntMat where NrMaterial ='" & Text3.Text & "' order by [dtval]", BancoMaterial, adOpenKeyset, adLockOptimistic, adCmdText
        Dim contador As String
        Dim Testa1 As String
        contador = Trim(Text5.Text)
        Testa1 = "0"
        Do While Not contador = "0"
           
            Dim TotCompra As String
            TotCompra = "0"
            TotCompra = TabEntMat("quantcompra")
           
            If contador >= TotCompra Then
                Testa1 = TotCompra
            Else
                Testa1 = Trim(Text5.Text)
            End If
      
            Dim i As Integer
            Dim FlagEncontrou As Boolean
            FlagEncontrou = False
           
            Dim qte As Integer
            qte = Trim(Text5.Text)
            If MSFlexGrid1.Rows > 1 Then
                For i = 1 To (MSFlexGrid1.Rows - 1)
                    If MSFlexGrid1.TextMatrix(i, 9) = Text6.Text Then
                        MSFlexGrid1.TextMatrix(i, 4) = MSFlexGrid1.TextMatrix(i, 4) + qte
                        FlagEncontrou = True
                        '.Row = I
                        Exit For
                    End If
                Next i
            End If
        With MSFlexGrid1
            If FlagEncontrou = False Then
                nLinhas = .Rows + 1
                .Rows = nLinhas
                nPos = .Rows - 1
                .Row = nPos
                .Col = 0 'insere dados na coluna 1
                .Text = TabEntMat("NomeMaterial")
                .Col = 1
                .Text = TabEntMat("NomeBase")
                .Col = 2
                .Text = TabEntMat("Org")
                .Col = 3
                .Text = TabEntMat("Unid")
                .Col = 4
                .Text = Testa1
                .Col = 5
                .Text = TabEntMat("NrMaterial")
                .Col = 6
                .Text = TabEntMat("grupo")
        End With
       contador = (contador - Testa1)
       Testa1 = "0"
       TabEntMat.MoveNext
       Loop
        Text5.Text = "1"
        TabEntMat.Close
           
        Text3.Text = ""
        Text6.Text = ""
---------------------------------------------------------------------
     
Martini
Pontos: 2843 Pontos: 2843
PAROBÉ
RS - BRASIL
Postada em 02/01/2007 10:37 hs         
acho neste caso você precisaria de um campo saldo em cada entrada, algo assim:
 
NrProd    Descricao        Qtde        DtVal         Saldo
10         AS infantil        800         01/01/07      800
10         AS infantil        200         01/02/07      200
10         AS infantil        300         01/03/07      300
 
dim rst as recordset
dim dblSaida as double
dblSaida = 1100
set rst = vgdb.openrecordset("Select NrProd, Descricao, Qtde, DtVal, Saldo from Entrdas where saldo > 0 Order By DtVal ")
if not rst.eof
  rst.moveMin
  do while not rst.eof and dblSaida  > 0
     if rst!Saldo < dblSaida then
        'atualiza saldo (usar chave primaria, fiz com data)
        vgdb.execute "Update entradas set Saldo = 0 where DtVal  = " + rst!DtVal
        dblSaida = dblSaida - rst!Saldo
     else
        'atualiza saldo (usar chave primaria, fiz com data)
        vgdb.execute "Update entradas set Saldo = Saldo - " + dblSaida  + " where DtVal  = " + rst!DtVal
        dblSaida = 0
     end if
  loop
endif
     
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página