Arnaldo,
1) quando usados corretamente, generators jamais geram valores duplicados. No caso específico do Firebird GEN_ID(generator,1) lhe devolve um valor único e automaticamente incrementa a sequência em 1.
2) tabelas de controle, para evitar duplicidade, devem ser acessadas por meio de stored procedures, cujo esqueleto seria
update "TabelaControladora"
set "UltimoUsado" = "UltimoUsado" + 1
where "TabelaControlada" = :TabelaControlada
select "UltimoUsado"
from "TabelaControladora"
where "TabelaControlada" = :TabelaControlada
Certifique-se de que esta stored procedure seja invocada em uma transação independente, configurada para repetir a tentativa em caso de deadlock. O "update" faz com que nenhuma outra transação possa gravar em "TabelaControladora" até que haja um commit ou rollback, garantindo assim a unicidade do "UltimoUsado".
Cordilamente,
Carlos