1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Urgente UPC para FT2200 - campo dt-cancela

Discussão em 'EMS , HCM e Totvs 11' iniciado por Marcelo Goncalves, Julho 1, 2025.

  1. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Tu leu essa parte aqui?
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Procedure recursiva que citei:

    Código:
    //Lá no topo do programa declara as variáveis que terão o handle, exemplo:
    DEF VAR handle-dt-cancela AS HANDLE NO-UNDO.
    
    //Neste seu caso específico, dentro de um IF que roda somente uma vez, coloca pra chamar o recursivo, exemplo:
    IF p-ind-event = "INITIALIZE" THEN DO:
         RUN BuscaWidget(CURRENT-WINDOW).  //vai pegar todos os handles de todos objetos filhos e netos da tela.
         //Dependendo, em alguns contextos, tem que pegar o CURRENT-WINDOW da tela pai da UPC, então ficaria assim:
         //Exemplo: RUN BuscaWidget(THIS-PROCEDURE:INSTANTIATING-PROCEDURE:CURRENT-WINDOW).
    
        //Tu pode verificar se conseguiu achar o handle do programa assim:
         IF VALID-HANDLE(handle-dt-cancela) THEN DO:
              MESSAGE "UHUUU, dt-cancela encontrado" VIEW-AS ALERT-BOX.
         END.
         ELSE DO:
              MESSAGE "AHHHHH, que dureza, não achei o campo dt-cancela" VIEW-AS ALERT-BOX.
              RETURN.
         END.
      
         ON LEAVE OF handle-dt-cancela PERSISTENT RUN minhaPasta\estaMesmaUPC.p(INPUT "LEAVE",
                INPUT "dt-cancela",
               INPUT handle-dt-cancela,
               INPUT handle-dt-cancela:FRAME,
               INPUT "Sem Tabela",
               INPUT ?).
    END.
    
    PROCEDURE BuscaWidget.
       DEF INPUT PARAMETER objEntrada AS HANDLE.
       DEF VAR objFilho AS HANDLE.
     
       objFilho = objEntrada:FIRST-CHILD.
     
       DO WHILE VALID-HANDLE(objFilho).
          IF objFilho:TYPE = "WINDOW" OR objFilho:TYPE = "FRAME" OR objFilho:TYPE = "FIELD-GROUP" THEN DO:
               //Aqui tu pega o handle de algum frame, exemplo: "IF objFilho:TYPE = "FRAME" AND objFilho:NAME = "FPage1" THEN meuFrameHandle = objFilho"
              RUN BuscaWidget(objFilho).
          END.
          ELSE DO:
             //Aqui pega o handle dos campos, botões e outros objetos diferentes dos citados no IF
             //Exemplo:
             //IF objFilho:NAME = "dt-cancela" THEN DO:
             //   handle-dt-cancela = objFilho.
             //END.
         END.
          objFilho = objFilho:NEXT-SIBLING NO-ERROR.
       END.
    END PROCEDURE.
    
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Editei 2 vezes, foi mal, acho que agora tá certo, rsrsrs
  4. Marcelo Goncalves

    Marcelo Goncalves Membro Participativo

    Bom dia Rafael!

    Desculpe a demora na resposta!

    Fiz da forma como você indicou, com alguns ajustes. Ao abrir a FT2200 está capturando o handle-dt-cancela:
    Ver anexo 2496

    Mas ao passar pelo LEAVE do dt-cancela, nada aocn
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Mas não tá chamando a própria UPC com o novo evento que você escreveu ?
  6. Marcelo Goncalves

    Marcelo Goncalves Membro Participativo

    Bom dia Rafael!

    Desculpe a demora na resposta!

    Fiz da forma como você indicou, com alguns ajustes. Ao abrir a FT2200 está capturando o handle-dt-cancela:
    upload_2025-7-8_17-45-31.png

    Só que na sequência também coloquei uma checagem dos demais handles, mas em nenhum momento passa no leave do dt-cancela. Abaixo segue o código até o momento. Será que estou esquecendo de ajustar alguma coisa?

    {include/i-prgvrs.i XX9999 9.99.99.999}
    {include/i-upc.i}
    {include/i-win.i}

    DEF INPUT PARAM p-ind-event AS CHAR.
    DEF INPUT PARAM p-ind-object AS CHAR.
    DEF INPUT PARAM p-wgh-object AS HANDLE.
    DEF INPUT PARAM p-wgh-frame AS WIDGET-HANDLE.
    DEF INPUT PARAM p-cod-table AS CHAR.
    DEF INPUT PARAM p-row-table AS ROWID.

    DEF VAR handle-dt-cancela AS HANDLE NO-UNDO.
    DEF VAR c-objeto AS CHAR NO-UNDO.
    DEF VAR h-frame AS WIDGET-HANDLE NO-UNDO.
    DEF VAR h-campo AS WIDGET-HANDLE NO-UNDO.
    DEF VAR h-serie AS WIDGET-HANDLE NO-UNDO.
    DEF VAR h-nro-nota AS WIDGET-HANDLE NO-UNDO.
    DEF VAR h-estabel AS WIDGET-HANDLE NO-UNDO.
    DEFINE NEW GLOBAL SHARED VAR wh-dt-cancela AS WIDGET-HANDLE NO-UNDO.

    IF p-ind-event = "AFTER-INITIALIZE" THEN
    DO:
    RUN BuscaWidget(CURRENT-WINDOW).

    MESSAGE
    "Teste de Handles:" SKIP
    "handle-dt-cancela: " + (IF VALID-HANDLE(handle-dt-cancela) THEN "OK" ELSE "NULO") SKIP
    "h-serie: " + (IF VALID-HANDLE(h-serie) THEN "OK" ELSE "NULO") SKIP
    "h-nro-nota: " + (IF VALID-HANDLE(h-nro-nota) THEN "OK" ELSE "NULO") SKIP
    "h-estabel: " + (IF VALID-HANDLE(h-estabel) THEN "OK" ELSE "NULO")
    VIEW-AS ALERT-BOX INFO BUTTONS OK.


    IF VALID-HANDLE(handle-dt-cancela) THEN
    DO:
    MESSAGE "1 - handle-dt-cancela: " handle-dt-cancela SKIP
    "h-serie: " h-serie SKIP
    "h-nro-nota: " h-nro-nota SKIP
    "h-estabel: " h-estabel
    VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.

    IF VALID-HANDLE(handle-dt-cancela) /*AND VALID-HANDLE(h-serie) AND VALID-HANDLE(h-nro-nota) AND VALID-HANDLE(h-estabel)*/ THEN
    DO:
    DEF VAR c-serie AS CHAR NO-UNDO.
    DEF VAR c-nro-nota AS CHAR NO-UNDO.
    DEF VAR c-estabel AS CHAR NO-UNDO.

    ASSIGN
    c-serie = h-serie:SCREEN-VALUE
    c-nro-nota = h-nro-nota:SCREEN-VALUE
    c-estabel = h-estabel:SCREEN-VALUE.

    FOR EACH os-canhoto-nf NO-LOCK
    WHERE os-canhoto-nf.cod-estabel = c-estabel
    AND os-canhoto-nf.serie = c-serie
    AND os-canhoto-nf.nr-nota = STRING(c-nro-nota):
    MESSAGE "A nota possui data de entrega registrada! Não será possível efetuar o cancelamento!"
    VIEW-AS ALERT-BOX INFO BUTTONS OK.
    END.
    END.
    END.
    ELSE
    DO:
    MESSAGE "2 - handle-dt-cancela não encontrado!"
    VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
    RETURN.
    END.

    ON LEAVE OF handle-dt-cancela PERSISTENT RUN osgupc\ft2200-upc01_Nova2.p(INPUT "LEAVE",
    INPUT "dt-cancela",
    INPUT handle-dt-cancela,
    INPUT handle-dt-cancela:FRAME,
    INPUT "Sem tabela",
    INPUT ?).

    END.

    PROCEDURE BuscaWidget.
    DEF INPUT PARAMETER objEntrada AS HANDLE.
    DEF VAR objFilho AS HANDLE.

    objFilho = objEntrada:FIRST-CHILD.

    DO WHILE VALID-HANDLE(objFilho).
    IF objFilho:TYPE = "WINDOW" OR objFilho:TYPE = "FRAME" OR objFilho:TYPE = "FIELD-GROUP" THEN DO:
    //Aqui pega o handle do frame, exemplo: "
    IF objFilho:TYPE = "FRAME" AND objFilho:NAME = "FPage0" THEN
    DO:
    ASSIGN handle-dt-cancela = objFilho.
    RUN BuscaWidget(objFilho).
    END.

    END.
    ELSE DO:
    //Aqui pega o handle dos campos, botões e outros objetos diferentes dos citados no IF
    //Exemplo:
    IF objFilho:NAME = "dt-cancela" THEN DO:
    handle-dt-cancela = objFilho.
    END.
    END.
    objFilho = objFilho:NEXT-SIBLING NO-ERROR.
    END.
    END PROCEDURE.

Compartilhe esta Página