Validar erro em fontes evitando que o smartclient caia.


Sabem aquela telinha que exibe um erro e depois derruba o smartclient? Pois então, tem como exibir o erro mas continuar o processo até o ponto do erro sem derrubar o client. Abaixo segue um exemplo para tratar esta situação: Vou simular um erro numa consulta SQL, quando o sistema identificar o erro uma tela de aviso irá ser exibida, mas ao invés de finalizar a rotina, o sistema continuará até um certo ponto, sugiro que aprimore a tela de aviso para que o usuário te envie o erro. validacaodeerro  

Static Function SuaFuncao()
	Local bBlock := ErrorBlock()

	//A função ErrorBlock define a atuação de um manipulador (handler) 
	//de erros sempre que ocorrer um erro em tempo de execução. 
	//Para isso, o manipulador de erro, é especificado com um bloco de código
	
	ErrorBlock( {|e| ChecErro(e)})
	
	//A função ChecErro é padrão do sistema, era se encarrega 
	//de receber o erro e exibir um alerta na tela para o usuario
	//Você pode criar sua propria tela de aviso, no final deste 
	//fonte mostro a sintaxe desta funcao

	BEGIN SEQUENCE
		//O comando BEGIN SEQUENCE define uma estrutura sequencial 
		//de controle dentro do fluxo de execução de um programa, 
		//permitindo a sua interrupção na ocorrência de um determinado evento.

		BeginSql Alias TMPSB1
			SELECT * FROM SB1010 
			WHERE D_E_L_E_T_ = '' 
			AND XXX   //Simulo o erro
			ORDER BY B1_COD
		EndSql

		/*SEU CODIGO*/

		ErrorBlock(bBlock)
	RECOVER
		//RECOVER - Define um ponto de recuperação, 
		//dentro do bloco de sequência, para o qual o 
		//fluxo de execução será desviado após a 
		//execução de um comando BREAK. 
		
		ErrorBlock(bBlock)
	END SEQUENCE
Return
Para saber mais acesse o TND Begin Sequence - http://tdn.totvs.com/display/framework/BEGIN+SEQUENCE+...+END ErrorBlock - http://tdn.totvs.com/pages/viewpage.action?pageId=23888930
//Sintaxe da Função
Static Function ChecErro(e)
	IF e:gencode > 0
		Help( " ",1,"ERR_FORM",,e:Description,3,1)
		lRet:=.F.
	Endif
	Break
Return(lRet)