Utilizando o campo X2_ROTINA da tabela SX2 (Tabelas de Dados)


O campo X2_ROTINA permite a execução de rotinas antes da abertura da tabela. tabelasx2arotina     Ou seja Você precisa saber quais orçamentos estão em aberto, você pode emitir um alerta ou até mesmo uma telinha exibindo os pedidos em aberto antes da rotina de orçamentos (MATA415) ser exibida. Neste caso, não precisará utilizar pontos de entrada, basta informar sua função no campo X2_ROTINA. Trabalhe com parâmetros para ativar ou não sua rotina, tipo: se parâmetros for verdadeiro, rode minha rotina. Exemplo:

#Include 'Protheus.ch'
#Include 'TopConn.ch'

User Function MFAT026()
	Local aArea		:= GetArea()
	Local lContinua := GetMv("MV_EXECORC")
	
	If lContinua
		Processa({|| MFAT026A()},"Verificando ","Aguarde...",.F.)
	Endif
	
	RestArea(aArea)
Return(.T.)

Static Function MFAT026A()
	Local aArea     := GetArea()
	Local aAreaSCJ  := SCJ->(GetArea())
	Local aAreaSCK  := SCK->(GetArea())
	Local cQuery := ""
	
	cQuery := "SELECT COUNT(CJ_NUM) TOTAL "
	cQuery += "FROM "+RetSqlName("SCJ")+" SCJ "
	cQuery += "WHERE SCJ.CJ_FILIAL='"+xFilial("SCJ")+"' AND "
	cQuery += "SCJ.CJ_STATUS NOT IN('B','C') AND "
	cQuery += "SCJ.D_E_L_E_T_=' '"
	
	If ( SELECT("TRBTMP") ) > 0
		dbSelectArea("TRBTMP")
		TRBTMP->(dbCloseArea())
	EndIf
	
	TcQuery cQuery Alias "TRBTMP" New
	If TRBTMP->(!Eof())
		MsgInfo("Existe(m) " + Alltrim(Str(TRBTMP->TOTAL)) + " orçamento(s) aberto(s)!","Orçamentos Abertos")
	Endif
	
	RestArea(aAreaSCJ)
	RestArea(aAreaSCK)
	RestArea(aArea)
Return(.T.)
[gallery size="medium" link="file" ids="3551,3552,3553"]