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

- Mensagens: 765
- 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: 2820
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
- Curtiu: 2 vezes
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: 20416
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 8029
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 2 vezes
- Curtiram: 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: 765
- 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: 20416
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 765
- 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: 3109
- 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)