|
|
Mensagem do
CAUAN_2024
em 12/04/2024, 10:44 h
Local: SP Registro: 28/02/2024 Postagens: 34 |
Bom dia Devs, estou com um problema, estou desenvolvendo um código em que ao usuário colocar uma quantidade, caso o numero colocado seja menor, ira abrir uma tela de mensagem sugerindo uma quantidade melhor(Segue anexo da imagem de exemplo), mas o erro esta que, mesmo colocando o valor sugerido, ainda sim aparece a mensagem, alguém poderia me ajudar?
Segue código abaixo:
local lRet := .t.
cQtd:= M-> CK_QTDVEN
if cQtd < 3
MSGINFO("Melhor quantidade sugerida = 3" )
elseif (cQtd < 6 .and. cQtd <> 4)
MSGINFO("Melhor quantidade sugerida = 6 " )
ELSEIF cQtd < 8
MSGINFO("Melhor quantidade sugerida = 8 " )
elseif cQtd < 10
MSGINFO("Melhor quantidade sugerida = 10 " )
elseif cQtd < 14 .and. cQtd <> 11
MSGINFO("Melhor quantidade sugerida = 14" )
elseif cQtd < 18 .and. cQtd <> 15
MSGINFO("Melhor quantidade sugerida = 18 " )
elseif cQtd < 30
MSGINFO("Melhor quantidade sugerida = 30 " )
elseif cQtd < 100
MSGINFO("Melhor quantidade sugerida = 100 " )
elseif cQtd < 200
MSGINFO("Melhor quantidade sugerida = 200 " )
endif
RETURN lRet |
|
|
Mensagem do
RKGIUSTI
em 12/04/2024, 11:45 h
Local: SP Registro: 15/02/2016 Postagens: 5 |
Bom dia Cauan,
Não seria algo assim:
local lRet := .t.
cQtd:= M-> CK_QTDVEN
if cQtd < 3
MSGINFO("Melhor quantidade sugerida = 3" )
lRet := .f.
elseif (cQtd > 4 .and. cQtd < 6)
MSGINFO("Melhor quantidade sugerida = 6 " )
lRet := .f.
ELSEIF (cQtd > 6 .and. cQtd < 8)
MSGINFO("Melhor quantidade sugerida = 8 " )
lRet := .f.
elseif(cQtd > 8 .and. cQtd < 10)
MSGINFO("Melhor quantidade sugerida = 10 " )
lRet := .f.
elseif(cQtd > 11 .and. cQtd < 14)
MSGINFO("Melhor quantidade sugerida = 14" )
lRet := .f.
elseif(cQtd > 15 .and. cQtd < 18)
MSGINFO("Melhor quantidade sugerida = 18 " )
lRet := .f.
elseif(cQtd > 18 .and. cQtd < 30)
MSGINFO("Melhor quantidade sugerida = 30 " )
lRet := .f.
elseif(cQtd > 30 .and. cQtd < 100)
MSGINFO("Melhor quantidade sugerida = 100 " )
lRet := .f.
elseif(cQtd > 100 .and. cQtd < 200)
MSGINFO("Melhor quantidade sugerida = 200 " )
lRet := .f.
endif
Abraço.
Raphael |
|
|
Mensagem do
3FRAIM
em 12/04/2024, 13:46 h
Local: GO Registro: 05/01/2011 Postagens: 24 |
Bom dia Raphael!
O problema acontece porque quando o valor está correto, ele cai sempre no próximo if...
Ex:
// quando cQtd == 3
if cQtd < 3 (falso)
...
elseif cQtd < 6 (verdadeiro)
.../// mostra a mensagem
Segue abaixo sugestão de fonte com solução sem que precise fazer um if pra cada situação.
local lRet := .T.
local aQtdes := {}
local cQtd := M->CK_QTDVEN
local ni
aadd(aQtdes, {1,3,3})
aadd(aQtdes, {4,4,4})
aadd(aQtdes, {5,6,6})
aadd(aQtdes, {7,8,8})
aadd(aQtdes, {9,9,10})
aadd(aQtdes, {11,11,11})
aadd(aQtdes, {12,14,14})
aadd(aQtdes, {15,15,15})
aadd(aQtdes, {16,18,18})
aadd(aQtdes, {19,30,30})
aadd(aQtdes, {31,100,100})
aadd(aQtdes, {101,200,200})
ni := aScan(aQtdes, {|x| cQtd >= x[1] .and. cQtd <= x[2] })
if ni > 0 .and. aQtdes[ni][3] > cQtd
msgInfo("Melhor quantidade sugerida: "+AllTrim(Str(aQtdes[ni][3])) )
lRet := .F.
endif
return lRet
|
|
|
Mensagem do
3FRAIM
em 12/04/2024, 14:10 h
Local: GO Registro: 05/01/2011 Postagens: 24 |
Bom dia Raphael!
... segue uma pequena melhoria...
local lRet := .T.
local aQtdes := {}
local cQtd := M->CK_QTDVEN
local ni
aadd(aQtdes, {1,3})
aadd(aQtdes, {4,4})
aadd(aQtdes, {5,6})
aadd(aQtdes, {7,8})
aadd(aQtdes, {9,10})
aadd(aQtdes, {11,11})
aadd(aQtdes, {12,14})
aadd(aQtdes, {15,15})
aadd(aQtdes, {16,18})
aadd(aQtdes, {19,30})
aadd(aQtdes, {31,100})
aadd(aQtdes, {101,200})
ni := aScan(aQtdes, {|x| cQtd >= x[1] .and. cQtd <= x[2] })
if ni > 0 .and. aQtdes[ni][2] > cQtd
msgInfo("Melhor quantidade sugerida: "+AllTrim(Str(aQtdes[ni][2])) )
lRet := .F.
endif
return lRet |
|
|
Mensagem do
RKGIUSTI
em 12/04/2024, 15:18 h
Local: SP Registro: 15/02/2016 Postagens: 5 |
Boa tarde Efraim,
O solicitante não foi eu, foi o Cauan... eu simplesmente apresentei a solução pra ele conforme a necessidade dele e baseado no código que ele forneceu.
A sua lógica também está válida, depende ele decidir o que é melhor pra ele utilizar.
Att.
Raphael Giusti
|
|
|
Mensagem do
ROBERTOMEN
em 12/04/2024, 15:43 h
Local: PR Registro: 04/07/2017 Postagens: 548 |
Boa tarde.
Creio que o seu problema não está no IF e sim no M->CK_QTDVEN
Vc está em um Acols e em Acols não existe M->CK_QTDVEN
Vc deve estar em um ponto de entrada da rotina que valida a linha do orçamento:
E para validar tem que ser feito assim:
Local nCK_QTDVEN:= aScan(aHeader,{|x|UPPER(Alltrim(x[2])) == "CK_QTDVEN"})
cQtd:= aCols[n,nCK_QTDVEN]
if cQtd < 3
MSGINFO("Melhor quantidade sugerida = 3" )
elseif (cQtd < 6 .and. cQtd <> 4)
MSGINFO("Melhor quantidade sugerida = 6 " )
ELSEIF cQtd < 8
MSGINFO("Melhor quantidade sugerida = 8 " )
elseif cQtd < 10
MSGINFO("Melhor quantidade sugerida = 10 " )
elseif cQtd < 14 .and. cQtd <> 11
MSGINFO("Melhor quantidade sugerida = 14" )
elseif cQtd < 18 .and. cQtd <> 15
MSGINFO("Melhor quantidade sugerida = 18 " )
elseif cQtd < 30
MSGINFO("Melhor quantidade sugerida = 30 " )
elseif cQtd < 100
MSGINFO("Melhor quantidade sugerida = 100 " )
elseif cQtd < 200
MSGINFO("Melhor quantidade sugerida = 200 " )
endif |
|
|
Mensagem do
TCHULA
em 12/04/2024, 15:52 h
Local: SP Registro: 02/10/2014 Postagens: 53 |
Boa tarde Cauan.
Tenta desta forma ve se ajuda.
local lRet := .t.
cQtd:= TMP1-> CK_QTDVEN -> Altera o M de memoria para o TMP1 de tabela temporaria que e usada no orçamento de vendas.
if cQtd < 3
MSGINFO("Melhor quantidade sugerida = 3" )
elseif (cQtd < 6 .and. cQtd <> 4)
MSGINFO("Melhor quantidade sugerida = 6 " )
ELSEIF cQtd < 8
MSGINFO("Melhor quantidade sugerida = 8 " )
elseif cQtd < 10
MSGINFO("Melhor quantidade sugerida = 10 " )
elseif cQtd < 14 .and. cQtd <> 11
MSGINFO("Melhor quantidade sugerida = 14" )
elseif cQtd < 18 .and. cQtd <> 15
MSGINFO("Melhor quantidade sugerida = 18 " )
elseif cQtd < 30
MSGINFO("Melhor quantidade sugerida = 30 " )
elseif cQtd < 100
MSGINFO("Melhor quantidade sugerida = 100 " )
elseif cQtd < 200
MSGINFO("Melhor quantidade sugerida = 200 " )
endif
RETURN lRet
|
|
|
Mensagem do
CAUAN_2024
em 15/04/2024, 08:38 h
Local: SP Registro: 28/02/2024 Postagens: 34 |
Muito obrigado gente, funcionou aqui, uma outra ajuda que gostaria de perguntar, como ficaria se eu quisesse validar apenas pra quando for balde?
Tentei da seguinte forma :
local aSCK := SCK->(GetArea())
local lRet := .T.
local aQtdes := {}
local cQtd := M->CK_QTDVEN
local ni
if ("BL" $ SCK-> CK_UM)
aadd(aQtdes, {1,55,55})
aadd(aQtdes, {56,100,100})
aadd(aQtdes, {101,200,200})
aadd(aQtdes, {201,220,220})
aadd(aQtdes, {221,300,300})
aadd(aQtdes, {301,420,420})
aadd(aQtdes, {421,600,600})
ni := aScan(aQtdes, {|x| cQtd >= x[1] .and. cQtd <= x[2] })
if ni > 0 .and. aQtdes[ni][3] > cQtd
msgInfo("Melhor quantidade sugerida: "+AllTrim(Str(aQtdes[ni][3])) )
lRet := .F.
endif
ENDIF
restarea(aSCK)
return lRet
|
|
|
Mensagem do
ROBERTOMEN
em 19/04/2024, 09:49 h
Local: PR Registro: 04/07/2017 Postagens: 548 |
Resposta aqui:
https://www.helpfacil.com.br/home.asp?qsTipo=f1&qsInfo1=1&qsInfo2=44499&qsInfo3=1 |
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|