first question: you must use getnextmodified() for the relevant fields on table.
second question: you can use in valid function some like: if !empty(this.value) this means that user change or write some in field then you valid that value, if not, don't need to evaluate nothing.
this also can help you to the first question.
another example: (valid event of text box)
if empty(this.value)
return .T. &¬hing to valid
endif
&&rest of validation code here
...
you must adapt code