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.
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.
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.
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!