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

[RESOLVIDO] EQ0506B

Discussão em 'EMS , HCM e Totvs 11' iniciado por rbaselio, Fevereiro 21, 2019.

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

    rbaselio Membro Participativo

    Amigos, pra variar estou com uma duvida.

    Estou desenvolvendo uma upc no programa EQ0506B, para pintar a linha de vermelho sempre que a quantidade pedida for maior que a quantidade disponível.
    Entretanto no evento "row-display" não permite que leia o valor do browse e a informação da quantidade disponível não está no buffer, por isso não consigo ler pela query.
    Alguém tem alguma sugestão de como proceder?

    Trecho da upc:
    Código:
    RUN pi-busca-widget (INPUT "br_table",
                             INPUT p-wgh-frame,
                             OUTPUT br-table2-eq0506).
    
        IF VALID-HANDLE(br-table2-eq0506) THEN DO:
            i = 1.
            h = br-table2-eq0506:GET-BROWSE-COLUMN(i).
            DO WHILE VALID-HANDLE(h):
                assign
                    vcColHandles2 = IF vcColHandles2 <> "":U THEN vcColHandles2 + ",":U + STRING(h) ELSE STRING(h)
                    nameColHandles2 = IF nameColHandles2 <> "":U THEN nameColHandles2 + ",":U + h:NAME ELSE h:NAME
                    i = i + 1
                    h = br-table2-eq0506:GET-BROWSE-COLUMN(i) NO-ERROR.
            END.
            ON 'row-display':U OF br-table2-eq0506 PERSISTENT RUN upc\upc-eq0506b-aux1.p (INPUT "row-display",
                                                                                          INPUT br-table2-eq0506,
                                                                                          INPUT vcColHandles2,
                                                                                          INPUT nameColHandles2).
        END.
    
    Função chamada na UPC:
    Código:
    def input  param p-ind-event        as char             no-undo.
    def input  param br-ped-ent         as handle           no-undo.
    def input  param id-colunas         as char             no-undo.
    def input  param nome-colunas       as char             no-undo.
    
    DEFINE VARIABLE i AS INTEGER     NO-UNDO.
    DEFINE VARIABLE h AS HANDLE      NO-UNDO.
    
    IF p-ind-event = "row-display" THEN DO:
        DO i = 1  TO NUM-ENTRIES(id-colunas):
            ASSIGN
                h = HANDLE(ENTRY(i,id-colunas))
                h:BGCOLOR = 12.
    
            IF h:BUFFER-NAME <> ? THEN
                MESSAGE h:BUFFER-NAME
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
        END.
    END.
    
    [​IMG]
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Tenho uma procedure recursiva que roda dentro da UPC pra achar o handle do browse, e então, a partir deste handle, pegar a query e navegar pela query e não pelos campos exibidos no browse.
    Testa forma, mesmo se o browse usa temp-table, é possível ler a informação.

    Código:
    PROCEDURE BuscaWidget.
      DEF INPUT PARAMETER ObjOrigem AS HANDLE. /* Handle do Frame/Objeto Original e dos próximas recursividades */
      DEF VAR ObjAtual AS HANDLE. /* Frame/Objeto Atual */
      DEF VAR ObjFilho AS HANDLE. /* Frame/Objeto 'Filho' */
      ObjAtual = ObjOrigem.
      DO WHILE VALID-HANDLE(ObjAtual):
         IF VALID-HANDLE(ObjAtual) THEN DO:
            /*IF ObjAtual:TYPE = "FRAME" AND ObjAtual:NAME = "fPage0" THEN fPage0 = ObjAtual:HANDLE.
            IF ObjAtual:TYPE <> "WINDOW" AND ObjAtual:TYPE <> "FRAME" AND ObjAtual:TYPE <> "FIELD-GROUP" THEN DO:
               IF ObjAtual:TYPE = "BUTTON" AND ObjAtual:NAME = "btCalcula" THEN btCalcula = ObjAtual.
               IF ObjAtual:TYPE = "BUTTON" AND ObjAtual:FRAME-NAME = "fpage2" AND ObjAtual:NAME = "btDrawback" THEN btDrawback = ObjAtual.
               IF ObjAtual:TYPE = "FILL-IN" AND ObjAtual:FRAME-NAME = "fpage0" AND ObjAtual:NAME = "nome-abrev" THEN txtNomeAbrev = ObjAtual.
               IF ObjAtual:TYPE = "FILL-IN" AND ObjAtual:FRAME-NAME = "fpage0" AND ObjAtual:NAME = "nr-pedcli" THEN txtNrPedCli = ObjAtual.
               IF ObjAtual:TYPE = "BROWSE" AND ObjAtual:FRAME-NAME = "fpage2" AND ObjAtual:NAME = "brSon2" THEN brSon2 = ObjAtual.
            END.*/
            IF ObjAtual:TYPE = "FRAME" OR ObjAtual:TYPE = "FIELD-GROUP" THEN DO:
               ObjFilho = ObjAtual:FIRST-CHILD NO-ERROR.
               IF ERROR-STAT :ERROR = FALSE THEN DO:
                  IF VALID-HANDLE(ObjFilho) THEN DO:
                     RUN BuscaWidget(ObjFilho).
                  END.
               END.
            END.
            ObjAtual = ObjAtual:NEXT-SIBLING NO-ERROR.
         END.
         ELSE LEAVE.
      END.
      IF VALID-HANDLE(ObjOrigem) THEN DO:
         ObjOrigem = ObjOrigem:FIRST-CHILD NO-ERROR.
         IF ERROR-STATUS :ERROR THEN RETURN.
         RUN BuscaWidget(ObjOrigem).
      END.
    END PROCEDURE.
    
    Para usar, dentro do evento escolhido na UPC, execute RUN BuscaWidget(INPUT CURRENT-WINDOW).
    Na parte da procedure que está comentada, como exemplo, altere os nomes e as variáveis handle para setar corretamente.

    Ai abaixo do "RUN BuscaWidget(INPUT CURRENT-WINDOW)." coloque:
    Código:
    IF VALID-HANDLE(brSon2) THEN DO:
          qItemDocto = brSon2:QUERY.
          bItemDocto = qItemDocto:GET-BUFFER-HANDLE(1).
       END.
       ELSE DO:
          MESSAGE "ERRO: Não foi possível carregar o Browse de Itens para memória!"
                   VIEW-AS ALERT-BOX ERROR BUTTONS OK.
       END.
    
    Onde brSon2 é o nome da variável Handle do Browse e qItemDocto é uma variável handle do tipo QUERY e bItemDocto é uma variável handle do tipo BUFFER.

    Feito isso, basta enviar estes handles para sua UPC auxiliar e processar.
    Segue código para percorrer os campos do buffer.
    Código:
    DEF VAR varBuffer AS HANDLE.
    DEF VAR xi AS INTEGER.
    
    DO  xi = 1 TO varBuffer:NUM-FIELDS.
        MESSAGE varBuffer:BUFFER-FIELD(xi):NAME
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
    END.
    
    Onde varBuffer é o handle buffer que você pegou dentro da procedure BuscaWidget.
  3. rbaselio

    rbaselio Membro Participativo

    Obrigado, me ajudou muito.
    Só tenho um ultimo problema, o campo do browse que eu quero obter não está na query, é um campo calculado.
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Então é mais simples.
    Supondo que a posição da coluna calculadada seja a 3a.
    Browse:get-browse-column (3):INPUT-VALUE
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página