PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
If e elseif
Versão:
11.8
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
image_2024_04_11T18_10_59_094Z.png (anexo)
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário RKGIUSTI 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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário 3FRAIM 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


Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário 3FRAIM 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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário RKGIUSTI 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 Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 12/04/2024, 15:43 h
Local: PR  Registro: 04/07/2017  Postagens: 479
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 Enviar e-mail Abrir o Perfil do usuário TCHULA TCHULA em 12/04/2024, 15:52 h
Local: SP  Registro: 02/10/2014  Postagens: 50
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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 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 Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 19/04/2024, 09:49 h
Local: PR  Registro: 04/07/2017  Postagens: 479
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

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal