Olá Rafael, eu peguei esse mesmo tipo de situação e resolvi pelo valida do campo na ViewDef, da uma olhada com fiz e veja se te ajuda.
Simples mas resolveu, se te ajudar marca como resposta, vlw.
Local bVldDoc := {|| u_e42VDoc()}
oView:SetFieldAction( 'ZA5_NUM', bVldDoc)
/*/{Protheus.doc} User Function e42VldDoc
(Fonte responsável por validar a sequencia da contagem pelo numero do documento)
@type Function
@author Leandro Lemos
@since 15/03/2021
@version P12
@param param_name, param_type, param_descr
@return return_var, return_type, return_description
@example
(examples)
@see (links_or_references)
/*/
User Function e42VDoc()
Local aArea := GetArea()
Local oModelPad := FWModelActive()
Local oModel := oModelPad:GetModel('ZA5MASTER')
Local lOk := .T.
Local oView := FWViewActive() //Objeto da View, adicionado para dar refresh após adicioar uma nova linha
Local cSequencia := '001'
//Só processa na inclusão
IF oModel:GetOperation() == MODEL_OPERATION_INSERT
DbSelectArea('ZA5')
DbSetOrder(1)
IF (DbSeek(xFilial('ZA5')+oModel:GetValue('ZA5_NUM')))
While ZA5->(!EOF() .and. ZA5_NUM == oModel:GetValue('ZA5_NUM'))
cSequencia := Soma1(cSequencia)
ZA5->(DBSkip())
EndDo
EndIF
//Setando a sequencia
oModel:SetValue('ZA5_SEQUEN',cSequencia)
//Atualizando a View
oView:Refresh('VIEW_ZA5')
EndIF
RestArea(aArea)
Return lOk