Urgente Adicionar registros em browse via UPC

Discussão em 'EMS , HCM e Totvs 11' iniciado por Clayton Oliveira, Fevereiro 13, 2023.

  1. Clayton Oliveira

    Clayton Oliveira Membro Participativo

    Olá,

    Possuo uma UPC na tela FT4011 (Cálculo de NF Devoluação) e a partir de um botão estou tentando adicionar registros no Browse já existente nesta tela. Mas ocorre o erro abaixo ao executar o código:
    ---------------------------
    ADD/SET-BUFFERS não pode ser usado em query estática br-tt-itens-devol. (7317)
    ---------------------------

    Código:
            
            h-query-tit = hBRW:QUERY.
            h-buffer-tit = h-query-tit:GET-BUFFER-HANDLE(1).
    
            create tt-itens-devol.
            assign tt-itens-devol.sequencia = 50
                   tt-itens-devol.it-codigo = "100050".
    
            create buffer bfTable for table "tt-itens-devol".
    
            h-query-tit:SET-BUFFER(bfTable).
            h-query-tit:query-prepare("for each tt-itens-devol").
            h-query-tit:query-open().
    Alguém sabe como devo proceder ?
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Suponto que o handle h-buffer-tit seja um buffer da tt-itens-devol basta usar ele pra criar o registro.

    Algo assim:
    Código:
    h-query-tit = hBRW:QUERY.
    h-buffer-tit = h-query-tit:GET-BUFFER-HANDLE(1).
    
    h-buffer-tit:BUFFER-CREATE().
    h-buffer-tit:BUFFER-FIELD("sequencia"):BUFFER-VALUE = 50.
    h-buffer-tit:BUFFER-FIELD("it-codigo"):BUFFER-VALUE = "100050".
    
    //Depois tem que rodar o código pra atualizar a query do Browse:
    h-query-tit:query-open().
    
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Se tem mais de uma tabela na query do Browse, faça a varredura assim:

    Código:
    DEF VAR xi AS INTEGER.
    
    h-query-tit = hBRW:QUERY.
    
    DO xi = 1 TO h-query-tit:NUM-BUFFERS.
       h-buffer-tit = h-query-tit:GET-BUFFER-HANDLE(xi).
       MESSAGE "Indice: " xi SKIP
               "Nome: " h-buffer-tit:NAME VIEW-AS ALERT-BOX.
    END.
    
  4. Clayton Oliveira

    Clayton Oliveira Membro Participativo

    Rafael,

    Deu certo. Obrigado.

    Só tive que acrescentar o QUERY-PREPARE, ficando desta maneira o código completo:

    Código:
            h-query-tit = hBRW:QUERY.
            h-buffer-tit = h-query-tit:GET-BUFFER-HANDLE(1).
    
            h-buffer-tit:BUFFER-CREATE().
            h-buffer-tit:BUFFER-FIELD("sequencia"):BUFFER-VALUE = 50.
            h-buffer-tit:BUFFER-FIELD("it-codigo"):BUFFER-VALUE = "100050".
            h-query-tit:QUERY-PREPARE("for each tt-itens-devol").
    
            h-query-tit:QUERY-OPEN().
    rafael.andrade curtiu isso.
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Excelente!!!

    O ideal é evitar mexer na query do Browse pois pode dar efeitos colaterais, alguns terríveis, então seria bom colocar o message
    na UPC e ver em que momento atualiza o browse e ver se é possível chamar o mesmo evento.
  6. Clayton Oliveira

    Clayton Oliveira Membro Participativo

    Boa tarde.

    A questão do browser por enquanto está sendo preenchida.
    Cai em uma outra situação mais complicada.
    Pois, consegui preencher o browser, mas ao acionar o OK essa tela é fechada e retorna pra sua tela mestre FT4003 (Calculo de NF) e preencher automaticamente o browse de itens daquela tela. Isso é o nativo.
    Preciso fazer o mesmo. Mas quando preencho o browse da FT4011, o conteúdo não está sendo replicado para a tela mestre.
    Acredito que devo fazer algumas chamadas de procedure internas via identificação do handle da tela, certo ?
    Foi o que tentei fazer.

    Exemplificando:

    1º Criei uma UPC na tela FT4011 adicionando o campo EMBARQUE e fazendo algumas tratativas a fim de adicionar no browse os itens. Como demonstra abaixo.
    E criei um botão Fake em cima do BtOK, onde o intuito é quando for acionado o botão seja chamado a procedure interna que realiza toda a transação de pegar o item do browse e levar pro browse da tela mestre:

    IF p-ind-event = "btOKfake" and
    p-ind-object = "BT" THEN DO:

    run saveRecordCustom in p-wgh-object.

    apply 'choose' to h-bt-ok.

    end.


    upload_2023-3-6_15-16-23.png

    Quando executo o código nada acontece. Tem idéia de como devo proceder?

    Obrigado.

Compartilhe esta Página