Imprimi Página | Fechar janela |
If e elseif Impresso de: Helpfacil - Portal do conhecimento Nome do Forum: ADVPL Descrição do Forum: Dúvidas sobre a programação em ADVPL URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=44493 Data da Impressão: quarta-feira, 18 de setembro de 2024 at 14:39 Topico: If e elseif Postado por: CAUAN_2024 Assunto: If e elseif Data Postagem: sexta-feira, 12 de abril de 2024 at 10:44 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 Respostas: Postado Por: RKGIUSTI Data Postagem: sexta-feira, 12 de abril de 2024 at 11:45 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 Postado Por: 3FRAIM Data Postagem: sexta-feira, 12 de abril de 2024 at 13:46 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 Postado Por: 3FRAIM Data Postagem: sexta-feira, 12 de abril de 2024 at 14:10 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 Postado Por: RKGIUSTI Data Postagem: sexta-feira, 12 de abril de 2024 at 15:18 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 Postado Por: ROBERTOMEN Data Postagem: sexta-feira, 12 de abril de 2024 at 15:43 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 Postado Por: TCHULA Data Postagem: sexta-feira, 12 de abril de 2024 at 15:52 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 Postado Por: CAUAN_2024 Data Postagem: segunda-feira, 15 de abril de 2024 at 08:38 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 Postado Por: ROBERTOMEN Data Postagem: sexta-feira, 19 de abril de 2024 at 09:49 Resposta aqui: https://www.helpfacil.com.br/home.asp?qsTipo=f1&qsInfo1=1&qsInfo2=44499&qsInfo3=1 |
Imprimir Página | Fechar Janela |