[RESOLVIDO] Ajuda para FOR EACH

Discussão em 'EMS , HCM e Totvs 11' iniciado por flybhz, Setembro 17, 2009.

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

    flybhz Sem Pontuação

    boa noite amigo,
    oque esta acontecendo com o codigo é o seguinte, um pedido atendido parcial apresenta a situacao abaixo, ele foi pedido 2 itens, o primeiro com 5 itens está sendo mostrado a nota corretamente pois foi atendido, porem o 2 segundo item nao foi atendido continuando em aberto no pedido e sem nota, porem com esta cosulta ele está aparecendo com o mesmo numero de nota que o item1, e esta informacao está errada pois ele nao foi atendido entao ele deveria trazer o campo nota vazio, correto?
    creio que o layout abaixo seria o correto.

    deveria ser assim:
    CLIENTE PEDIDO ITEM QTD-PED QTD-ATEND STATUS NOTA
    cliente Ped-cli item1 5,0000 5,0000 Atendido parcial 0101010
    cliente Ped-cli item2 3,0000 0,0000 Atendido parcial

    está sendo assim:
    CLIENTE PEDIDO ITEM QTD-PED QTD-ATEND STATUS NOTA
    cliente Ped-cli item1 5,0000 5,0000 Atendido parcial 0101010
    cliente Ped-cli item2 3,0000 0,0000 Atendido parcial 0101010

    abracos e obrigado a todos.
  2. jonas

    jonas Membro Participativo

    Faz o seguinte, coloca o código pra analisarmos.

    O número da nota fiscal está sendo exibido por uma variável? Se estiver, pode ser que ela esteja guardando o último valor salvo. Por exemplo: você está dentro de um for each, e, dá um find em uma tabela qualquer:
    Código:
    for each ped-venda no-lock:
       find first nota-fiscal where... no-lock no-error.
       if avail nota-fiscal then
            assign c-nr-nota-fis = nota-fiscal.nr-nota-fisc.end.
    
    No exemplo acima, caso não caia no if (não encontre o registro pelo comando find), a variável irá exibir o último valor salvo nela.

    Neste caso você teria que fazer da seguinte forma:

    Código:
    for each ped-venda no-lock:
        assign c-nr-nota-fis = "".    /*<----  Limpar o conteudo da variável */
       find first nota-fiscal where... no-lock no-error.
       if avail nota-fiscal then
            assign c-nr-nota-fis = nota-fiscal.nr-nota-fisc.
    end.
    
  3. flybhz

    flybhz Sem Pontuação

    Boa noite amigo,
    segue o codigo como solicitado.
    Abracos e muito obrigado.

    output to value ('c:\pedidos.txt').

    for each ped-venda no-lock where ped-venda.dt-entrega = date('01/08/2009'),
    each ped-item of ped-venda no-lock,
    each emitente fields(cod-emitente nome-emit nome-abrev) where emitente.cod-emitente = ped-venda.cod-emitente no-lock:

    put ped-venda.nome-abrev at 1
    ped-venda.nr-pedcli at 15
    ped-item.it-codigo at 30
    ped-item.qt-pedida at 50
    ped-item.qt-atendida at 65.

    if ped-venda.cod-sit-ped = 1 then
    put "Em aberto" at 90.
    else if ped-venda.cod-sit-ped = 2 then
    put "Atendido parcial" at 90.
    else if ped-venda.cod-sit-ped = 3 then
    put "Atendido Total" at 90.

    if ped-venda.cod-sit-ped = 1 or
    ped-venda.cod-sit-ped = 2 or
    ped-venda.cod-sit-ped = 3 then do:

    find first nota-fiscal where nota-fiscal.nome-ab-cli = emitente.nome-abrev and
    nota-fiscal.nr-pedcli = ped-venda.nr-pedcli no-lock no-error.
    if avail nota-fiscal then do:
    put nota-fiscal.nr-nota-fis at 100.

    end.
    end.

    end.
    output close.
  4. jonas

    jonas Membro Participativo

    Boa noite colega

    Tente o código abaixo, fiz um teste e ficou legal.
    Código:
    output to value ('c:\pedidos.txt').
    
    for each ped-venda no-lock where ped-venda.dt-entrega = date('01/08/2009'),
    each ped-item of ped-venda no-lock,
    each emitente fields(cod-emitente nome-emit nome-abrev) where emitente.cod-emitente = ped-venda.cod-emitente no-lock:
    
    put ped-venda.nome-abrev at 1
    ped-venda.nr-pedcli at 15
    ped-item.it-codigo at 30
    ped-item.qt-pedida at 50
    ped-item.qt-atendida at 65.
    
    if ped-venda.cod-sit-ped = 1 then
    put "Em aberto" at 90.
    else if ped-venda.cod-sit-ped = 2 then
    put "Atendido parcial" at 90.
    else if ped-venda.cod-sit-ped = 3 then
    put "Atendido Total" at 90.
    
    if ped-venda.cod-sit-ped = 1 or
    ped-venda.cod-sit-ped = 2 or
    ped-venda.cod-sit-ped = 3 then do:
    
    find first nota-fiscal where nota-fiscal.nome-ab-cli = emitente.nome-abrev and
    nota-fiscal.nr-pedcli = ped-venda.nr-pedcli no-lock no-error.
    if avail nota-fiscal and ped-item.cod-sit-item <> 1 then do:
    put nota-fiscal.nr-nota-fis at 100.
    
    end.
    end.
    
    end. 
    output close.
    
    
    Veja se é assim que você precisa.

    Qualquer coisa posta uma mensagem...

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

Compartilhe esta Página