Estouro de Campo com Valor Negativo
Moderador: Moderadores
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
Estouro de Campo com Valor Negativo
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
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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Estouro de Campo com Valor Negativo
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.Nascimento escreveu:campo numerico tamanho 9 decimal 3
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Estouro de Campo com Valor Negativo
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.
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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Estouro de Campo com Valor Negativo
Olá!
Ou ensinado por José Quintas -> replace qtd := qtd - IIF((qtd+nBAIXA) >= 999999.999 , 999999.999, nBAIXA)
Saudações,
Itamar M. Lins Jr.
Limite do campo numérico do Harbour é 12.4 (salvo engano) ou 16 sem decimais. No seu caso 13.3 = 16campo numerico tamanho 9 decimal 3
Ou ensinado por José Quintas -> replace qtd := qtd - IIF((qtd+nBAIXA) >= 999999.999 , 999999.999, nBAIXA)
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
Estouro de Campo com Valor Negativo
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
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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Estouro de Campo com Valor Negativo
Resolveu, mas... eu preferiria usar de uma forma mais universal: IF rota - baixa < -9999999Nascimento escreveu:então eu so botei if leNum(rota_atu - baixa) < 13
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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
Estouro de Campo com Valor Negativo
entendo mais não pretendo mudar ao menos por hora...JoséQuintas escreveu:Resolveu, mas... eu preferiria usar de uma forma mais universal: IF rota - baixa < -9999999Nascimento escreveu:então eu so botei if leNum(rota_atu - baixa) < 13
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.
mais agradeço a todos que se empenharam para me ajudar...
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Estouro de Campo com Valor Negativo
Olá!
Segue outra abordagem, em Harbour:Nascimento escreveu:mais não pretendo mudar ao menos por hora...
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
//-----------------------------------------------------------------[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)