Totali CheckOut
1. O checkout abre a tabela de modo compartilhado, para que todos os checkouts possam acessar a tabela ao mesmo tempo.
2. Existe uma função que retorna o próximo número da venda. Essa função precisa da série, da filial, e da quantidade de numnots requisitados.
3. Na função pesquisa se existe registro no numnot para essa série e essa filial.
3.1. Se não encontrar, gera um registro novo começando do último numnot gravado na base local daquela série + quantidade de numnots. Normalmente se começa do 1.
3.2. Se encontrar, é feito o LOCK apenas da linha necessária. Fica em loop por 10 vezes.
3.2.1. Se não conseguiu dar lock, sai da rotina e não continua a venda. Retornando erro.
3.2.2. Se conseguiu dar lock, soma na tabela numnot a quantidade passada por parâmetro e determina o próximo numnot.
4. Antes de retornar o próximo numnot, pesquisa na base local se já não existe uma venda com esse numnot. Se existir retorna erro.
Detalhe sobre Fatura e Remessa
Fatura e remessa tem um processo de buscar sempre 2 números, para ser sequencial.
Para isso existe uma tabela local onde sempre são gravados os próximos números de venda consultados na função acima.
Na fatura pesquisa-se 2 números e já soma + 2 no numnot.dbf.
Quando chega a emissão da remessa, ela só consulta o segundo número pesquisado anteriormente.
Ou seja, antes do processo 3, é verificado se existe algo gravado nessa tabela auxiliar e então pega o número dessa tabela sem modificar o numnot.