Atualização de dados
Enviado: 03 Jan 2013 19:23
Amiguinhos,
Quero compartilhar com vocês algo que aconteceu comigo e gastei muito tempo procurando "fantasmas" nas linhas de códigos tentando entender o ocorrido. Um cliente me relatou que um item do estoque após uma emissão bem sucedida de uma NF-e de venda, não fez os procedimentos de baixa nos campos de quantidade, girando e não atualizou o campo de última saída e úlitima NF-e. Para completar a estranheza, tenho um arquivo onde salvo todas os movimentações do estoque, tanto de entrada como de saída, e neste arquivo consta a emissão do referido item. O registro só é adicionado no arquivo de movimentação após o sucesso da baixa no arquivo de estoque.
Era como se tivesse executado um rollback no arquivo de estoque.
No ato da baixa no estoque eu faço o seguinte: Vale ressaltar que em todos os processos faço, o travamento de rede. DBAPPEND(), DBRLOCK(), DBUNLOCK(), DBCOMMIT(). Sempre funcionou durante doze anos sem erros.
1 - Salvo em uma variável o saldo do estoque antes da venda
vQtdAnt = AL_ESTOQ->quanti
2 - Realizo a baixa no estoque.
repl quanti with (quanti - Quantidade Vendida)
repl ultnot with (Número da NF-e)
repl ultsai with (Data da Emissão da NF-e)
3 - No arquivo de movimentação, gero um novo registro onde salvo o processo ocorrido.
repl qtdant with vQtdAnt
repl qtdmov with Quantidade Vendida
repl qtdatu with AL_ESTOQ->quanti
Acontece que, eu entrei no arquivo AL_ESTOQ e os campos estavam com o saldo antes da baixa, entendo que não seria possível, pois o saldo atual (após a baixa) eu pego direto do bando de dados.
Eu fiquei frustado por não encontrar o que estava ocorrendo, é um caso único, mais estava me incomodando muito. Foi quando subitamente, me veio a mente a seguinte falha de processo:
Neste clientes eles entram muito no cadastro do item para corrigir novas descrições, mudança de linha, colocar quantidades promocionais, etc.
O usuário pode entrar em um item e o que o programa faz, localiza o item DBSEEK(), passa o conteúdo do item para variáveis e ele começa a alterar alguns dados como um novo termo que precisa ter na descrição, exemplo BUCHA PARA MB1113 e agora precisa ser BUCHA para MB1113/MB1114, o que ocorre é que ele sai para atender um mecânio que precisa de encontrar uma peça no estoque e demora duas horas para voltar. Quando ele volta a variáveis estão desatualizadas, pois digamos que já houve vendas e consequentemente os campos quanti, ultnot, ultsai já estão diferentes das variáveis e quando salvar as variáveis no bando de dados irá causar uma falha neste campos que são importantíssimos para a saúde do sistema.
O que eu fiz, no cadastro de itens do estoque eu não deixo atualizar os campos: quantidade, girando, última saída, última NF-e de saída, dentre outros.
Eu acho que foi este o problema ocorrido no sistema.
Sei que os muitos dos nobres amigos aqui já fazem a coisa certa e não permitem que uma falha deste nível passe batida "como eu deixei". A todos segue minha adimiração . Todavia, como demandou muito tempo para encontrar esta falha, quero compartilhar para que possa servir "alerta/orientação" para aqueles que precisam.
Saudações,
Júlio.
Quero compartilhar com vocês algo que aconteceu comigo e gastei muito tempo procurando "fantasmas" nas linhas de códigos tentando entender o ocorrido. Um cliente me relatou que um item do estoque após uma emissão bem sucedida de uma NF-e de venda, não fez os procedimentos de baixa nos campos de quantidade, girando e não atualizou o campo de última saída e úlitima NF-e. Para completar a estranheza, tenho um arquivo onde salvo todas os movimentações do estoque, tanto de entrada como de saída, e neste arquivo consta a emissão do referido item. O registro só é adicionado no arquivo de movimentação após o sucesso da baixa no arquivo de estoque.
Era como se tivesse executado um rollback no arquivo de estoque.
No ato da baixa no estoque eu faço o seguinte: Vale ressaltar que em todos os processos faço, o travamento de rede. DBAPPEND(), DBRLOCK(), DBUNLOCK(), DBCOMMIT(). Sempre funcionou durante doze anos sem erros.
1 - Salvo em uma variável o saldo do estoque antes da venda
vQtdAnt = AL_ESTOQ->quanti
2 - Realizo a baixa no estoque.
repl quanti with (quanti - Quantidade Vendida)
repl ultnot with (Número da NF-e)
repl ultsai with (Data da Emissão da NF-e)
3 - No arquivo de movimentação, gero um novo registro onde salvo o processo ocorrido.
repl qtdant with vQtdAnt
repl qtdmov with Quantidade Vendida
repl qtdatu with AL_ESTOQ->quanti
Acontece que, eu entrei no arquivo AL_ESTOQ e os campos estavam com o saldo antes da baixa, entendo que não seria possível, pois o saldo atual (após a baixa) eu pego direto do bando de dados.
Eu fiquei frustado por não encontrar o que estava ocorrendo, é um caso único, mais estava me incomodando muito. Foi quando subitamente, me veio a mente a seguinte falha de processo:
Neste clientes eles entram muito no cadastro do item para corrigir novas descrições, mudança de linha, colocar quantidades promocionais, etc.
O usuário pode entrar em um item e o que o programa faz, localiza o item DBSEEK(), passa o conteúdo do item para variáveis e ele começa a alterar alguns dados como um novo termo que precisa ter na descrição, exemplo BUCHA PARA MB1113 e agora precisa ser BUCHA para MB1113/MB1114, o que ocorre é que ele sai para atender um mecânio que precisa de encontrar uma peça no estoque e demora duas horas para voltar. Quando ele volta a variáveis estão desatualizadas, pois digamos que já houve vendas e consequentemente os campos quanti, ultnot, ultsai já estão diferentes das variáveis e quando salvar as variáveis no bando de dados irá causar uma falha neste campos que são importantíssimos para a saúde do sistema.
O que eu fiz, no cadastro de itens do estoque eu não deixo atualizar os campos: quantidade, girando, última saída, última NF-e de saída, dentre outros.
Eu acho que foi este o problema ocorrido no sistema.
Sei que os muitos dos nobres amigos aqui já fazem a coisa certa e não permitem que uma falha deste nível passe batida "como eu deixei". A todos segue minha adimiração . Todavia, como demandou muito tempo para encontrar esta falha, quero compartilhar para que possa servir "alerta/orientação" para aqueles que precisam.
Saudações,
Júlio.