Habiitar campo para alteração

Boa tarde, tenho alguns campos feitos com Tsay() que estão desabilitados para edição gostaria de criar dois botões, um para cada botão, para habilitar a edição desses dois campos, e precisava que quando eu alterasse os valores desses dois campos, os demais campos tenham seus valores atualizados conforme os valores setados

campos:

TSay():New( 095,420, { ||"Valor Unitario com Impostos:" } , oInfo, ,oFont01,.f.,.f.,.f.,.t.,CLR_BLACK ) @ 105,420 GET nXpreco SIZE 090,100 PICTURE "@E 99,999,999,999.9999" OBJECT oGet1 when .f.

e

TSay():New( 095,285, { ||"Valor Unitario com Impostos:" } , oInfo, ,oFont01,.f.,.f.,.f.,.t.,CLR_BLACK ) @ 105,285 GET nUnitMedio SIZE 090,100 PICTURE "@E 99,999,999,999.9999" OBJECT oGet1 when .f.

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Olá, fiz segue um exemplo desenvolvido com tSay e Tget, espero que ajude


#Include 'totvs.ch'
#Include 'protheus.ch'
/*/{Protheus.doc} User Function actionBtn
  (long_description)
  @type  Function
  @author Leandro Lemos
  @since 15/04/2024
  @version P12
  @param param_name, param_type, param_descr
  @return return_var, return_type, return_description
  @example
  (examples)
  @see (links_or_references)
  /*/
User Function actionBtn()
    Local lEdita := .F.
    Local oModal
    Local oContainer
    Local cGetVal1 := "0000,00"
    Local cGetVal2 := "0000,00"
    Local cSayTotal:= "0000,00"

    oModal  := FWDialogModal():New()
    oModal:SetEscClose(.T.)
    oModal:setTitle("título da Janela ")
    oModal:setSubTitle("SubTitulo da Janela")

    //Seta a largura e altura da janela em pixel
    oModal:setSize(200, 140)

    oModal:createDialog()
    oModal:addCloseButton(nil, "Fechar")
    oContainer := TPanel():New( ,,, oModal:getPanelMain() )
    oContainer:Align := CONTROL_ALIGN_ALLCLIENT

    oTGetVal1                 := TGet():New( 1,1,{|u|if(PCount()==0,cGetVal1,cGetVal1:=u)},oContainer,020,011,"@E 9999,99",,0,,,.F.,,.T.,,.F.,,.F.,.F.,,.F./*lReadOnly*/,.F.,,'cGetVal1'/*cReadVar*/,,,,)
    oTGetVal1:bWhen        := {|| lEdita }
    oTGetVal1:bChange    := {||cSayTotal := Transform(val(cGetVal1)+val(cGetVal2),"@E 999,999,999.99")}

    oTGetVal2                 := TGet():New( 20,1,{|u|if(PCount()==0,cGetVal2,cGetVal2:=u)},oContainer,020,011,"@E 9999,99",,0,,,.F.,,.T.,,.F.,,.F.,.F.,,.F./*lReadOnly*/,.F.,,'cGetVal2'/*cReadVar*/,,,,)
    oTGetVal2:bWhen        := {|| lEdita }
    oTGetVal2:bChange    := {|| cSayTotal := Transform(val(cGetVal1)+val(cGetVal2),"@E 999,999,999.99")}

    oSayTotal           := TSay():New(40,1,{||cSayTotal},oContainer,,,,,,.T.,CLR_RED,CLR_WHITE,300,20)


    oBtnEdita := TButton():New(60, 1, "Libera Edição",     oContainer, {|| lEdita := .T.},  100, 20, , , , .T., , , , , , )

    oModal:Activate()
Return

Bom dia, Dessa forma quando eu mudar o valor do campo, os demais seriam atualizados?

Ontem tentando fomras de realizar, criei os dois botões e coloquei cada um para chamar a mesma tela em outro fonte, um botão chama um fonte igual, mas que um campo está habilitado e o outro botão chama outra tela igual mas com o outro campo habilitado, porem quando troco o valor do campo, nada acontece.
como eu poderia setar o valor no campo e ele atualizar os valores dos demais?
Irei tentar dessa forma que me enviou

Sim, no exemplo o botão só altera a variável lEdita que está no bWhen dos TGets, o que faz os valores serem atualizados são os metodos bChange também do Tget, você pode alterar esse trecho {|| cSayTotal := Transform(val(cGetVal1)+val(cGetVal2),“@E 999,999,999.99”)} por uma função

nesse exemplo, onde eu colocaria os campos da tabela que quero que seja habilitado e atualize os demais?

cGetVal1 = c7_xpreco e cGetVal2 = c7_xtotal, ?

isso, você pode chamar esse código direto no vscode e debugar, para ter ideia de como está funcionando e ir testando

estou anexando um print de como está minha tela: 1.jpg, adaptei para habilitar os dois campos que precisava, agora para ele atualizar os demais campos, eu teria que re-crialos da mesma forma que me passou, para assim quando eu mudar valor eles atualizarem?

anexei 2.jpg, como estão os outros campos juntamente com o que inseri da forma que me passou

não necessariamente, eu que acostumei com tGet, você pode fazer usando da forma que desenvolveu, da uma olhada no tdn, MSGET() - Frameworksp - TDN

adicionei mais um print 3.jpg
Quando habilito e altero valor do campo em vermelho do MEDIO ele tem que atualizar o campo abaixo dele e os outros 2 campos a direita(menos de quantidade)
Quando habilito e altero valor do campo em vermelho do COMBINADO ele tem que atualizar o campo a baixo dele e os outrosd 2 campos a esquerda(menos de quantidade)
como eu posso fazer isso?

Opa, deu certo aqui, era apenas questão de ajuste as minhas variaveis, muito obrigado

opa, maravilha, que bom que ajudou

Um outra dúvida sobre, como faço para pegar os valores desses campos que foram atualizados, e salvo eles no banco? tipo um botão salvar para que o valor do campo total seja inserido no banco