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

Duvida Capturar mudanças para toggle-box

Discussão em 'EMS , HCM e Totvs 11' iniciado por tfofano, Abril 28, 2025.

  1. tfofano

    tfofano Membro Participativo

    Boa tarde Pessoal, estou criando uma UPC para o CD0201, e estou tendo dificuldade para que meu toggle-box, acompanhe as mudanças do campo de nr-contrato,

    Tentei já de algumas formas, mas não estou achando uma forma que funcione corretamente,

    Se puderem me auxiliar, eu estou usando o campo log-1 e log-2 da tabela contrato-for para dar o CHECKED nos campos,

    def input param p-ind-event as char no-undo.
    def input param p-ind-object as char no-undo.
    def input param p-wgh-object as handle no-undo.
    def input param p-wgh-frame as widget-handle no-undo.
    def input param p-cod-table as char no-undo.
    def input param p-row-table as rowid no-undo.

    def var h-frame as handle no-undo.

    DEFINE NEW GLOBAL SHARED VARIABLE wh-nr-contrato-crsbrands AS WIDGET-HANDLE NO-UNDO.
    DEFINE NEW GLOBAL SHARED VARIABLE wh-arq-anexo-crsbrands AS WIDGET-HANDLE NO-UNDO.
    DEFINE VARIABLE wh-tb-cont-anexo AS WIDGET-HANDLE NO-UNDO.
    DEFINE VARIABLE wh-tb-acordo-com AS WIDGET-HANDLE NO-UNDO.
    DEFINE VARIABLE wh-bt-eliminar AS WIDGET-HANDLE NO-UNDO.

    DEFINE NEW GLOBAL SHARED VARIABLE c-seg-usuario AS CHARACTER NO-UNDO.

    DEFINE VAR contrato LIKE contrato-for.nr-contrato.

    DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
    DEFINE VARIABLE c-objeto AS CHARACTER NO-UNDO.

    DEF VAR h-objeto AS WIDGET-HANDLE NO-UNDO.
    ASSIGN c-objeto = entry(num-entries(p-wgh-object:file-name, "~/"), p-wgh-object:FILE-NAME, "~/").

    /* message "EVENTO" p-ind-event skip */
    /* "OBJETO" p-ind-object skip */
    /* "NOME OBJ" c-objeto skip */
    /* "FRAME" p-wgh-frame skip */
    /* "TABELA" p-cod-table skip */
    /* "ROWID" string(p-row-table) view-as alert-box. */


    FUNCTION SearchObject RETURN WIDGET-HANDLE
    (INPUT pHandle AS HANDLE,
    INPUT pName AS CHARACTER):

    DEFINE VARIABLE pReturnHandle AS HANDLE.
    pReturnHandle = ?.

    IF NOT CAN-QUERY (pHandle, "first-child") THEN RETURN pReturnHandle.
    pHandle = pHandle:FIRST-CHILD.

    REPEAT:
    IF NOT VALID-HANDLE (pHandle) THEN LEAVE.
    IF pName = pHandle:NAME THEN RETURN pHandle.
    pReturnHandle = SearchObject (pHandle, pName).
    IF pReturnHandle <> ? THEN RETURN pReturnHandle.
    pHandle = pHandle:NEXT-SIBLING.
    END.

    RETURN pReturnHandle.

    END.

    if p-ind-event = "BEFORE-INITIALIZE" AND
    p-ind-object = "viewer" THEN DO:

    ASSIGN h-frame = p-wgh-frame:first-child
    h-frame = h-frame:first-child.

    DO WHILE h-frame <> ?:
    if h-frame:type <> "field-group" then do:
    IF h-frame:TYPE = 'FILL-IN' THEN DO:
    IF h-frame:NAME = 'nr-contrato' THEN DO:

    ASSIGN wh-nr-contrato-crsbrands = h-frame.

    CREATE BUTTON wh-arq-anexo-crsbrands
    ASSIGN FRAME = wh-nr-contrato-crsbrands:FRAME
    COL = wh-nr-contrato-crsbrands:COL + 60
    ROW = wh-nr-contrato-crsbrands:ROW
    FONT = wh-nr-contrato-crsbrands:FONT
    LABEL = "Anexos"
    WIDTH = 10
    HEIGHT = 1
    NAME = "bt-arq-anexos"
    SENSITIVE = TRUE
    TOOLTIP = "Anexar arquivos ao pedido de compra"
    VISIBLE = YES
    TRIGGERS:
    /* ON CHOOSE PERSISTENT */
    ON CHOOSE PERSISTENT RUN cnp/upc-cn0201.p (input 'PRESS-BUTTON-ANEXO',
    input 'BUTTON-ANEXO',
    input p-wgh-object,
    input p-wgh-frame,
    input p-cod-table,
    input p-row-table).
    END TRIGGERS.

    END.
    END.

    assign h-frame = h-frame:next-sibling.
    end.
    ELSE
    assign h-frame = h-frame:first-child.

    END.
    END.

    // Thiago Fofano - 28/04/2025 - Adicionar dois flags 1 - Contrato Anexo 2- Acordo Comercial
    if p-ind-event = 'BEFORE-INITIALIZE' AND
    p-ind-object = 'BROWSER' THEN DO:

    ASSIGN wh-bt-eliminar = SearchObject(INPUT p-wgh-frame, 'bt-eliminar').

    IF VALID-HANDLE(wh-bt-eliminar) THEN DO:
    CREATE TOGGLE-BOX wh-tb-cont-anexo.
    ASSIGN wh-tb-cont-anexo:LABEL = 'Contrato Anexo'
    wh-tb-cont-anexo:FRAME = wh-bt-eliminar:FRAME
    wh-tb-cont-anexo:COL = wh-bt-eliminar:COL + 30
    wh-tb-cont-anexo:ROW = wh-bt-eliminar:ROW
    wh-tb-cont-anexo:FONT = wh-bt-eliminar:FONT
    wh-tb-cont-anexo:SENSITIVE = FALSE
    wh-tb-cont-anexo:CHECKED = FALSE.

    CREATE TOGGLE-BOX wh-tb-acordo-com. /*log-2*/
    ASSIGN wh-tb-acordo-com:LABEL = 'Acordo Comercial'
    wh-tb-acordo-com:FRAME = wh-bt-eliminar:FRAME
    wh-tb-acordo-com:COL = wh-bt-eliminar:COL + 45
    wh-tb-acordo-com:ROW = wh-bt-eliminar:ROW
    wh-tb-acordo-com:FONT = wh-bt-eliminar:FONT
    wh-tb-acordo-com:SENSITIVE = FALSE.

    END.

    END.

    IF p-ind-event = 'BEFORE-DISPLAY' AND
    p-ind-object = 'VIEWER' THEN DO:

    IF VALID-HANDLE(wh-tb-cont-anexo) THEN DO:
    ASSIGN wh-tb-cont-anexo:SENSITIVE = TRUE.
    END.

    IF VALID-HANDLE(wh-tb-acordo-com) THEN DO:
    ASSIGN wh-tb-acordo-com:SENSITIVE = TRUE.
    END.

    END.

    IF p-ind-event = 'PRESS-BUTTON-ANEXO' AND
    p-ind-object = 'BUTTON-ANEXO' THEN DO:
    IF VALID-HANDLE(wh-arq-anexo-crsbrands) THEN DO:
    RUN cnp/escn0001.w (INPUT INT(wh-nr-contrato-crsbrands:SCREEN-VALUE)).
    END.
    END.
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Bom dia, eu não consegui entender muito bem o que vc quer fazer, mas quando eu preciso que um campo dependa do conteudo do outro, eu coloco no bloco principal, não importa qual é o p-ind-event e nem o p-ind-object, simplesmente no bloco principal eu mandou procurar o campo, se a rotina que captura o handle achou os 2 campos, tanto o campo da tela como o meu, eu já aplico as regras e pronto, inclusive eu nem uso mais variavels globais, já que em cada passada de upc eu procuro o campo.
    Eu sempre procuro um campo de tela, achei, procuro o meu campo, se não achei, e ele deveria ficar na mesma frame do campo que eu achei, dai eu crio ele na mesma frame.
    tento os 2 handles ou até mais dependendo da situação, já aplico as regras.
    Será que consegui explicar ou me enrolei um pouco.
  3. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Completando, se eu já criei o meu campo na frame, quando a UPC passar lá novamente, a rotina que acha os campos em tela vai achar o meu campo, e dai é só pegar o handle e usar.
  4. tfofano

    tfofano Membro Participativo

    Bom dia,

    Agora sim entendi bem, vou tentar aqui, obrigado Mestre!
  5. tfofano

    tfofano Membro Participativo

    Opa atualização, deu certo cara, muito obrigado,

    Fiz a definição do botão fora de um evento da tela ai consegui fazer as manipulações que precisava.

    Vlw!
    bootstrapmaster curtiu isso.

Compartilhe esta Página