1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Duvida Timeout no Totvs Datasul

Discussão em 'Progress 4GL' iniciado por ds201, Julho 10, 2021.

  1. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Então, se vc fizer um for each numa tabela que tem dados por estabelecimento, por exemplo, vamos supor que vc tem estabelecimentos 101, 102,103 e 104, porem o 103 não tem movimento na tabela, e o cod-estabel é indice ...

    dai fazemos assim, como boa pratica .....
    Código:
    for each estabelec no-lock:
        for each nota-fiscal no-lock
            where nota-fiscal.cod-estabel = estabelec.cod-estabel:
            ...
        end.
    end.
    
    Nesse caso, os estabelecimentos que tem registros, o progress te devolve rapidão, mas quando chegar no 103, que não tem movimento, ai ele fica pensando ....
    Então se vc usar um can-find antes ...
    Código:
    for each estabelec no-lock:
        if can-find(first nota-fiscal
                    where nota-fiscal.cod-estabel = estabelec.cod-estabel) then do:
            for each nota-fiscal no-lock
                where nota-fiscal.cod-estabel = estabelec.cod-estabel:
                ...
            end.
        end.
    end.
    
    Agora vc tem o melhor na performance ...
    outra dica é vc sempre se referenciar a todos os campos da chave, voltando ao exemplo, estou usando somente o campo cod-estabel, que é indice em varias chaves dessa tabela, mas se eu fizer ...
    Código:
    for each estabelec no-lock:
        if can-find(first nota-fiscal
                    where nota-fiscal.cod-estabel = estabelec.cod-estabel) then do:
            for each nota-fiscal no-lock
                where nota-fiscal.cod-estabel = estabelec.cod-estabel
                  and nota-fiscal.serie       = nota-fiscal.serie
                  and nota-fiscal.nr-nota-fis = nota-fiscal.nr-nota-fis:
                ...
            end.
        end.
    end.
    
    O progress mesmo já seleciona o melhor indice com esses campos, por incrivel que pareça, é mais eficiente do que vc usar - "use-index" pra dizer qual indice usar.
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    P.S.: é isso mesmo, eu estou dizendo que o campo da tabela é igual ele mesmo, isso serve pra quando quiser selecionar um indice e tem campos no indice que não te interessa, declara desse jeito ...
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Caramba, auto-referência da própria tabela? por essa realmente eu não esperava que era bom, rsrsrs
  4. ds201

    ds201 Membro Participativo

    Obrigado a todos pelo apoio.
    Com suas dicas o programa ficou mais rápido e deixou de ter problemas com o timeout.

Compartilhe esta Página