FUNCTION _st_Gw_GeraId (tcCampo) LOCAL lnId,lcArq,lcTabela,llBuff,lnReprocessOld lnReprocessOld = SET("Reprocess") SET REPROCESS TO 3 SECONDS lcTabela = ALIAS() lcArq = "gw_gera_id" lnId = -1 tcCampo = UPPER(tcCampo) IF !USED(lcArq) USE (lcArq) IN 0 SHARED ENDIF SELECT (lcArq) GO TOP IN (lcArq) LOCATE FOR ALLTRIM(&lcArq..pk) == ALLTRIM(tcCampo) IF NOT FOUND() APPEND BLANK IN (lcArq) REPLACE &lcArq..pk WITH tcCampo REPLACE &lcArq..tabela WITH lcTabela ELSE IF !RLOCK(lcArq) && criar uma rotina para possivel erro. ERROR [Registro travado por outro usuário, não permitindo a geração da Chave primária],[Informe a controplan] SET REPROCESS TO lnReprocessOld RETURN -1 ENDIF ENDIF lnId = &lcArq..nextval REPLACE &lcArq..nextval WITH &lcArq..nextval + 1 UNLOCK IN (lcArq) USE IN (lcArq) SELECT (lcTabela) SET REPROCESS TO lnReprocessOld RETURN lnId ENDFUNCIt works perfectly until 2 stations engage in a transaction using the same table.