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 for first e find first

Discussão em 'Progress 4GL' iniciado por brunoowr, Julho 23, 2018.

  1. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    No primeiro caso, o FOR EACH será percorrido por completo e quando não achar o item ou o emitente, vai dar erro progress se não tratar com NO-ERROR e NOT AVAIL

    No segundo caso, é um FOR EACH aninhado, então tem a mesma função do INNER JOIN no SQL, só vai exibir os registros de nota fiscal que tem item na tabela item, e cliente na tabela emitente, se faltar
    algum desses registros, a nota fiscal vai será percorrida.

    Naturalmente, nesse caso, o único jeito de ter NF sem ter item cadastrado é praticamente impossível visto que são todas tabelas da Totvs.

    Agora, no caso de tabelas customizadas, um FOR EACH aninhado pode ser ruim, pois não mostrará os registros que estão sem vínculo.

    Na linguagem progress não sei como fazer, ou se existe, o chamado LEFT JOIN que é usado na linguagem SQL, ou seja, trazer a NF independente se tem item na tabela item ou cliente na tabela emitente.
  2. brunoowr

    brunoowr Membro Participativo

    Entendi.
    E exatamente, aqui tenho programas feitos das duas formas mas todos são com a tabela nota-fiscal.
    Fiquei com a dúvida se no segundo caso poderia exibir somente um item, já que só tem um emitente e ambos estão com "first", e essa dúvida surgiu enquanto eu estava explicando as tabelas relacionadas.
    Muito obrigado!
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    No segundo caso, nessas tabelas com registro de código único, tem que usar FIRST mesmo, senão vai ficar varrendo essas tabelas desnecessariamente.
    Só traria menos registros, se caso não houver o vínculo entre as tabelas por funcionar igual ao INNER JOIN do SQL.
    brunoowr curtiu isso.
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Traduzindo a query, seria algo como:

    "Trazer todos os Itens da NF informada desde que haja registro na tabela item e emitente, trazendo também os registros destes no buffer de memória."
    brunoowr curtiu isso.
  5. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Vc só tem o inner join se montar uma query com as tabelas, for each e find first vc não tem como fazer.
    brunoowr curtiu isso.
  6. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Desculpa, eu quis dizer left join
    brunoowr curtiu isso.

Compartilhe esta Página