Esse é o problema do código aleatório, se você não verificar se o código gerado já existe, isso sempre irá acontecer. O que você pode fazer é a todo código gerado fazer uma consulta para ver se ele já existe, porém se o seu banco for pequeno tudo bem, o sistema não ira demorar para gerar um outro código, caso o código gerado já exista.
Más como é um sistema de vendas, isso tende a crescer e vai chegar o tempo que o sistema ira começar a demorar para gerar esse código, agora um código sequencial isso não tem problema, basta você pegar o último código gerado e somar 1.
Tenho uns programas que rodam em rede, e quando o último número de cadastro em uma tabela a parte, e sempre que o usuário inicia um novo cadastro, eu guardo esse número, assim se outro usuário entrar no sistema e iniciar um novo cadastro ao mesmo tempo, não tenho o problema de duplicidade e com o código sequencial você tem uma certeza de quantos registros ou vendas você tem
O que você poderia fazer era substituir os seus códigos existentes, por um código sequencial e depois dar continuidade na contagem, acho que assim você teria menos dor de cabeça. Não sei qual a linguagem que você programa, ADO - DAO - SQL e você usa o DATA para se conectar com o banco, más se tiver alguma dúvida da rotina, coloca aqui e fala qual é a forma que você programa, que a gente consegue te ajudar