O campo X2_ROTINA permite a execução de rotinas antes da abertura da tabela. 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"]