[RESOLVIDO] Controle de fifo

Discussão em 'EMS , HCM e Totvs 11' iniciado por antonioc, Janeiro 29, 2015.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. antonioc

    antonioc Membro Participativo

    Boa tarde.

    Tenho o estoque de um determinado item que é controlado por lote.

    Fazendo um programa em progress, como sei o qual lote é o mais antigo. Qual campo das tabelas utilizo para fazer esta verificação.

    Obrigado
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    rowid(saldo-estoq), fora isso os seus usuarios ao clicar os lotes deveriam ter uma nomenclatura com data ou uma sequencia para identificar o mais antigo, outra coisa que vc poderia usar seria listar os movimentos do item / lote, usando os tipos de movimento NFE ou ACA, que são as entradas que criam os lotes, e dai usar o campo nr-trans que é sequencial unico.
  3. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Código:
    define variable rowidSaldoEstoque as rowid no-undo.
    
    assign rowidSaldoEstoque = ?.
    
    for first saldo-estoq no-lock
        ,
        first  movto-estoq of saldo-estoq no-lock
        where {ininc/i03in218.i 4 movto-estoq.esp-docto} = 'ACA'
           or {ininc/i03in218.i 4 movto-estoq.esp-docto} = 'NFE'
        break
           by movto-estoq.nr-trans:
    
        assign rowidSaldoEstoq = rowid(saldo-estoq).
    end.
    
    find first saldo-estoq no-lock
         where rowid(saldo-estoq) = rowidSaldoEstoq
               no-error.
    
    if avail saldo-estoq then do:
        /* aqui vc tem o seu lote mais antigo */
        message saldo-estoq.lote
            view-as alert-box info buttons ok.
    end.
    
  4. jaozi_nho

    jaozi_nho Membro Participativo

    O datasul não facilita nesses casos, como saber o mais antigo ou buscar pela origem dos saldos, em alguns casos buscar na movto-estoq leva muito tempo .

    Se for utilizar essa busca pelo FIFO com muita frequência recomendo criar uma tabela a parte e registrar um ID populado por uma Sequence a cada lote criado, assim o lote com menor ID sera sempre o mais antigo.


    Abraço .
  5. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    vc pode usar o rowid de saldo-estoq, que seria o seu ID, mas vc não consegue fazer um break by rowid(), dai tem que ler todos os lotes com saldo e pegar o rowid menor.
    Código:
    define variable rowidSaldoEstoq as rowid no-undo.
    
    assign rowidSaldoEstoq = ?.
    for each saldo-estoq no-lock
          where saldo-estoq.it-codigo      = 'codigoitem'
               and saldo-estoq.cod-estabel = '101'
               and saldo-estoq.cod-depos   = 'EXT':
         if rowidSaldoEstoq = ? then assign rowidSaldoEstoq = rowid(saldo-estoq).
         if rowid(rowidSaldoEstoq) < rowidSaldoEstoq then assign rowidSaldoEstoq = rowid(saldo-estoq).
    
    end.
    
    find first saldo-estoq no-lock
            where rowid(saldo-estoq) = rowidSaldoEstoq
                        no-error.
    
    if avail saldo-estoq then do:
         /* lote mais antigo */
    end.
  6. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    esqueci de colocar o teste do saldo, "and saldo-estoq.qtidade-atu <> 0"
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página