Página 1 de 1
Estouro de Campo com Valor Negativo
Enviado: 17 Nov 2021 12:42
por Nascimento
Estourando tamanho de campo na gravação
amigos estou com um problema na gravação de um banco de baixa no estoque, como sempre o cliente pede mais dar manutenção é outros quinhentos
todo fechamento de caixa o estoque diminue oq foi vendido
o valor negativo fica a tal ponto que estoura o tamanho do campo
a pergunta é como eu faria essa verificação que se estourar o tamanho do campo ele não efetue o replace?
campo numerico tamanho 9 decimal 3
lembrando os valores negativos , como eu faria pra evitar esse estouro de campo?
att: Nascimento
Estouro de Campo com Valor Negativo
Enviado: 17 Nov 2021 12:55
por Jairo Maia
Nascimento escreveu:campo numerico tamanho 9 decimal 3
Será que a função
LenNum( <nNumber> ) não resolveria? Então você checa se o numeral é maior que o tamanho do campo, e muda para zero ou pula o Replace.
Estouro de Campo com Valor Negativo
Enviado: 17 Nov 2021 13:00
por JoséQuintas
A pergunta é:
Quando é que esse estoque negativo vai virar positivo?
Possibilidades de alteração:
indicação no estoque, se vai controlar estoque (se faz baixa ou não)
IF no replace pra não estourar
uma rotina que sempre modifica o estoque deixando o mínimo de -10.000.000, pra nunca chegar a -100.000.000
o que tá parecendo é que só baixa, e nunca soma.
Estouro de Campo com Valor Negativo
Enviado: 17 Nov 2021 13:12
por Itamar M. Lins Jr.
Olá!
campo numerico tamanho 9 decimal 3
Limite do campo numérico do Harbour é 12.4 (salvo engano) ou 16 sem decimais. No seu caso 13.3 = 16
Ou ensinado por José Quintas -> replace qtd := qtd - IIF((qtd+nBAIXA) >= 999999.999 , 999999.999, nBAIXA)
Saudações,
Itamar M. Lins Jr.
Estouro de Campo com Valor Negativo
Enviado: 17 Nov 2021 13:44
por Nascimento
muito obg nobre amigo jairo resolvido a situação
peguei o valor do campo atual - o valor de baixa , com o LenNum() ele dá a quantidade de numeros
abri o banco e coloquei esse valor no campo no campo -9999999.999
quando passa para gravar da o total de 13 estourando o tamanho , então eu so botei if lenNum(rota_atu - baixa) < 13
problema aparentemente resolvido
Estouro de Campo com Valor Negativo
Enviado: 17 Nov 2021 14:11
por JoséQuintas
Nascimento escreveu:então eu so botei if leNum(rota_atu - baixa) < 13
Resolveu, mas... eu preferiria usar de uma forma mais universal: IF rota - baixa < -9999999
Assim vale em qualquer linguagem de programação.
LenNum() também vale pra número positivo, mas não sei se a solução de negativo vai ser a mesma pra positivo.
Estouro de Campo com Valor Negativo
Enviado: 17 Nov 2021 17:54
por Nascimento
JoséQuintas escreveu:Nascimento escreveu:então eu so botei if leNum(rota_atu - baixa) < 13
Resolveu, mas... eu preferiria usar de uma forma mais universal: IF rota - baixa < -9999999
Assim vale em qualquer linguagem de programação.
LenNum() também vale pra número positivo, mas não sei se a solução de negativo vai ser a mesma pra positivo.
entendo mais não pretendo mudar ao menos por hora...
mais agradeço a todos que se empenharam para me ajudar...
Estouro de Campo com Valor Negativo
Enviado: 17 Nov 2021 18:53
por alxsts
Olá!
Nascimento escreveu:mais não pretendo mudar ao menos por hora...
Segue outra abordagem, em Harbour:
Código: Selecionar todos
// hbmk2 Teste hbmemio.hbc
REQUEST HB_MEMIO
REQUEST DBFCDX
PROCEDURE Teste()
LOCAL aLayOut := { { "vlOrder", "N", 13, 2 } }
LOCAL bErr := ErrorBlock( __BreakBlock() ), oErr
Begin Sequence
DbCreate( "mem:Teste", aLayOut, "DBFCDX", .T., "tbOrder" )
tbOrder->( DbAppend() )
tbOrder->vlOrder := 99999999999999999999.99
Recover Using oErr
With Object oErr
If :subsystem == "DBFCDX" .And. :subcode == 1021
hb_Alert( "Erro;Nao foi possivel realizar a atualizacao.;Verifique o saldo em estoque deste produto.",, "W+/GR+" )
Endif
// aqui pode tratar outras exceções, quantas forem necessárias...
End With
Always
tbOrder->( DbCloseArea() )
DbDrop( "mem:Teste", "DBFCDX" )
ErrorBlock( bErr )
End Sequence
RETURN
//-----------------------------------------------------------------