Olá Luciano, segue a forma como estou fazendo, no ModelDef defino uma pré-validação no método AddGrid, assim antes de excluir será feita a validação.
//ModelDef
Local bPreGrid := {|oStruZA6, nLine, cAction, cIDField, xValue, xCurrentValue| fPreLin(oStruZA6, nLine, cAction, cIDField, xValue, xCurrentValue)}
oModel:AddGrid("ZA6DETAIL", "ZA5MASTER",oStruZA6, /* bLinePre */ , /* bLinePost */ , bPreGrid, /* bPost */, /* bLoad */)
//Static fPreLin
Static Function fPreLin(oModel, nLine, cAction, cIDField, xValue, xCurrentValue)
Local lRet := .T.
IF cAction == 'DELETE'
oModel:GoLine(nLine)
If !(oModel:IsDeleted()) .and. oModel:GetValue('ZA6_SITUA') == 'I'
Help(,,'Produto processado',,'O produto ja foi processado',1,0,NIL,NIL,NIL,NIL,NIL,{'para excluir esse produto desfaça o procesamento'})
lRet := .F.
EndIF
EndIF
Return lRet