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

Urgente Criar registro na tt-digita de um relatório padrão

Discussão em 'EMS , HCM e Totvs 11' iniciado por Alessandra Miranda Pardin, Setembro 23, 2021.

  1. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Essa tt-digita é realmente uma tabela de memória (temp-table)? pq a wt-docto (que aparentemente aparece uma WORK-Table), na verdade é uma tabela física no banco Totvs, por exemplo.

    Se for realmente uma TEMP-TABLE, faz assim, se encontrar na memória tem que achar 1 dos 2, se achar ele retorna o objeto válido.

    Depois disso só programas usando BUFFER dinâmico de tabela, conhece?

    Código:
    
    DEF VAR meuObjBufferHandle AS HANDLE.
    DEF VAR meuObjQueryHandle AS HANDLE.
    
    RUN BuscaQueryBuffer(INPUT "tt-digita",
                                                 INPUT "BUFFER",
                                                 OUPUT meuObjBufferHandle).
    
    MESSAGE "BUFFER VÁLIDO?" SKIP VALID-HANDLE(meuObjBufferHandle) VIEW-AS ALERT-BOX.
    
    RUN BuscaQueryBuffer(INPUT "tt-digita",
                                                 INPUT "QUERY",
                                                 OUPUT meuObjQueryHandle).
    
    MESSAGE "QUERY VÁLIDA?" SKIP VALID-HANDLE(meuObjQueryHandle) VIEW-AS ALERT-BOX.
    
    PROCEDURE BuscaQueryBuffer.
      DEF INPUT PARAMETER NomeTabela AS CHAR.
      DEF INPUT PARAMETER Tipo       AS CHAR.
      DEF OUTPUT PARAMETER objSaida AS HANDLE.
      DEF VAR obj AS HANDLE.
      DEF VAR xi AS INTEGER.
      DEF VAR xi2 AS INTEGER.
    
      DO xi = 1 TO 10000.
         obj = HANDLE(STRING(xi)) NO-ERROR.
         IF VALID-HANDLE(obj) THEN DO:
            IF obj:TYPE = "BUFFER" THEN DO:
               IF Tipo = "BUFFER" AND obj:NAME = NomeTabela THEN objSaida = obj.
            END.
            ELSE IF obj:TYPE = "QUERY" THEN DO:
               DO xi2 = 1 TO obj:NUM-BUFFERS.
                  IF Tipo = "BUFFER" AND obj:GET-BUFFER-HANDLE(xi2):NAME = NomeTabela THEN DO:
                     objSaida = obj:GET-BUFFER-HANDLE(xi2).
                  END.
                  ELSE IF Tipo = "QUERY" AND obj:GET-BUFFER-HANDLE(xi2):NAME = NomeTabela THEN DO:
                     CREATE QUERY objSaida.
                     objSaida:SET-BUFFERS(obj:GET-BUFFER-HANDLE(xi2)).
                  END.
               END.
            END.
         END.
      END.
    END PROCEDURE.
    
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    código corrigido:

    Código:
    DEF VAR meuObjBufferHandle AS HANDLE.
    DEF VAR meuObjQueryHandle AS HANDLE.
    
    RUN BuscaQueryBuffer(INPUT "tt-digita",
                         INPUT "BUFFER",
                         OUTPUT meuObjBufferHandle).
    
    MESSAGE "BUFFER VÁLIDO?" SKIP VALID-HANDLE(meuObjBufferHandle) VIEW-AS ALERT-BOX.
    
    RUN BuscaQueryBuffer(INPUT "tt-digita",
                         INPUT "QUERY",
                         OUTPUT meuObjQueryHandle).
    
    MESSAGE "QUERY VÁLIDA?" SKIP VALID-HANDLE(meuObjQueryHandle) VIEW-AS ALERT-BOX.
    
    PROCEDURE BuscaQueryBuffer.
      DEF INPUT PARAMETER NomeTabela AS CHAR.
      DEF INPUT PARAMETER Tipo       AS CHAR.
      DEF OUTPUT PARAMETER objSaida AS HANDLE.
      DEF VAR obj AS HANDLE.
      DEF VAR xi AS INTEGER.
      DEF VAR xi2 AS INTEGER.
    
      DO xi = 1 TO 10000.
         obj = HANDLE(STRING(xi)) NO-ERROR.
         IF VALID-HANDLE(obj) THEN DO:
            IF obj:TYPE = "BUFFER" THEN DO:
               IF Tipo = "BUFFER" AND obj:NAME = NomeTabela THEN objSaida = obj.
            END.
            ELSE IF obj:TYPE = "QUERY" THEN DO:
               DO xi2 = 1 TO obj:NUM-BUFFERS.
                  IF Tipo = "BUFFER" AND obj:GET-BUFFER-HANDLE(xi2):NAME = NomeTabela THEN DO:
                     objSaida = obj:GET-BUFFER-HANDLE(xi2).
                  END.
                  ELSE IF Tipo = "QUERY" AND obj:GET-BUFFER-HANDLE(xi2):NAME = NomeTabela THEN DO:
                     CREATE QUERY objSaida.
                     objSaida:SET-BUFFERS(obj:GET-BUFFER-HANDLE(xi2)).
                  END.
               END.
            END.
         END.
      END.
    END PROCEDURE.
    
    
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Lembrando que você tem que rodar esse código exatamente no ponto certo, dentro da UPC.
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    outro jeito é pegar o buffer ta tabela através do handle de um browse
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Não esqueça de vir aqui falar se deu certo.

Compartilhe esta Página