Olá Pessoal, sou nova em ADVPL. e gostaria de uma ajuda ... eu preciso fazer a seguinte validação de um campo em uma grid:
Se for digitado asterisco (*) no campo (ZZH_CODEMP),o campo de descrição (ZZH_DESEMP) deve ser incluído o texto "TODOS" automaticamente.
O campo ZZH_CODEMP tem uma consulta padrão, mas caso o usuário colocar * o outro campo de descrição automaticamente recebe "TODOS".
Agradeço a atenção.
Olá, nesse caso o ideal é colocar um gatilho no campo ZZH_CODEMP que dependendo do conteúdo do campo poderá atuar em outro campo como o ZZH_DESEMP.
Mais detalhes para MVC aqui: https://terminaldeinformacao.com/knowledgebase/metodo-addtrigger/
Olá eduarda, segue como pode ser feito, tive o mesmo problema e resolvi usando o metodo SetProperty na modelDef
//ModelDef
oStructGrid:SetProperty('ZZH_CODEMP', MODEL_FIELD_VALID, {|| preencheLin()})
/*/{Protheus.doc} preencheLin
(long_description)
@type Static Function
@author Leandro Lemos
@since 25/05/2022
@version P12
@param param_name, param_type, param_descr
@return return_var, return_type, return_description
@example
(examples)
@see (links_or_references)
/*/
Static Function preencheLin()
Local aArea := GetArea()
Local oModel := FWModelActive()
Local oModelGrid
Local nOperation
Local aSaveLines := FWSaveRows()
Local lRet := .T.
IF oModel <> Nil
oModelGrid := oModel:GetModel('ZB3DETAIL')
nOperation := oModelGrid:GetOperation() //3 == Inclusão, 4 == Alteração
//Alteração
IF nOperation == 3 .or. nOperation == 4
nLinha := oModelGrid:GetLine()
oModelGrid:GoLine(nLinha)
//Verificando se a linha não está deletada
IF(!oModelGrid:IsDeleted())
IF oModelGrid:GetValue('ZB3_FIDELI') == '*'
oModelGrid:SetValue('ZZH_DESEMP','TODOS')
oModelGrid:GoLine(nLinha)
EndIF
EndIF
EndIF
EndIF
FWRestRows( aSaveLines )
RestArea(aArea)
Return (lRet)
silfar
Maio 31, 2022, 5:13pm
4
Estou precisando de algo parecido, porem em vez de alterar o valor de outro campo, preciso tornar ele editavel ou não. Alguem pod eme ajudar ?
Bom dia. Sei que estou atrasado, mas caso ainda tenha interesse, consegui validar se os campos serão editáveis (inclusive se a linha será delatável ou não) usando a cláusula BEFORELINE:
NEW MODEL ;
TYPE 2
[ linhas suprimidas aqui ]
BEFORELINE { |_oMdl| _OkEditLin (_oMdl) }
static function _OkEditLin (_oModel)
local _lRet := .T.
if _oModel:GetValue(“ZA_MSBLQL”,_oModel:nLine) == “1”
_lRet = .F.
endif
return _lRet
Agradeço a Atenção do Josué e do Leandro, deram ideia de como posso resolver... porém fiz da seguinte maneira..
Criei uma função que é chamada no gatilho do SIGACFG..
User Function zGNCM1()
Local cPosi := ""
Local cGat := M->ZZI_DESCNC
Local cAst := "TODOS"
IF(ALLTRIM(M->ZZI_NCM)) == "*"
cGat := cAst
cPosi := cGat
ELSE
cPosi := POSICIONE("SYD",1,FwXFilial("SYD")+ZZI_NCM,"YD_DESC_P")
ENDIF
Return cPosi