Eu fiz desta forma. Espero que ajude.
#INCLUDE "TOTVS.ch"
#INCLUDE "rwmake.ch"
#INCLUDE "TBICONN.ch"
#INCLUDE "FWMVCDEF.CH"
User Function MT110TOK()
Local nPosPrd := aScan(aHeader,{|x| AllTrim(x[2]) == 'C1_CC'})
Local nPosQtd := aScan(aHeader,{|x| AllTrim(x[2]) == 'C1_OP'})
Local lValido := .T.
Local nX := 0
For nX :=1 To Len( aCols )
If ( !aCols[nx][Len(aCols[nX])] )
If ( Empty(aCols[nX][nPosQtd]) .AND. Empty(aCols[nX][nPosPrd]) )
MsgStop("Campo CC OU OP está vazio!")
lValido := .F.
Exit
EndIf
EndIf
Next nX
Return(lValido)
o que vc quer que esse PE faça? Esses dias usei o MT110LOK para validar campos nulos, funcionou perfeitamente
— Lucas de Paulo Santos 19 de Mar de 2024Isso, seria basicamente essa ideia..se tiver uma determinada conta o campo de item teria que ser de preenchimento obrigatório, caso ao contrário com outras contas o campo teria que ser "inativo" para preenchimento.
— Tauani Vitória 19 de Mar de 2024