Imprimi Página | Fechar janela |
Substring 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=44496 Data da Impressão: quarta-feira, 18 de setembro de 2024 at 14:12 Topico: Substring Postado por: CAUAN_2024 Assunto: Substring Data Postagem: segunda-feira, 15 de abril de 2024 at 09:02 Bom dia Devs, Poderiam me ajudar com uma função? o codigo tem a função de sugerir um numero melhor caso seja menor do q o esperado, essa parte deu certo, mas estou batendo cabeça pois quero q apenas apareça a mensagem quando o produto for balde, poderiam me ajudar? Segue o codigo abaixo: local aSCK := SCK->(GetArea()) local lRet := .T. local aQtdes := {} local cQtd := M->CK_QTDVEN local ni //if SUBSTR( nProduto, 13,TamSx3("CK_PRODUTO")[1]) == ‘4‘ 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 Respostas: Postado Por: ROBERTOMEN Data Postagem: segunda-feira, 15 de abril de 2024 at 10:11 bom dia M-> pega o valor em memória SCK-> pega o valor do campo da tabela SCK no registro posicionado. Se vc diz que funcionou a logica da melhor quantidade sugerida usando local cQtd := M->CK_QTDVEN, porque você está conparando o seu if ("BL" $ SCK-> CK_UM) com SCK-> já tentou if ("BL" $ M-> CK_UM) Postado Por: CAUAN_2024 Data Postagem: segunda-feira, 15 de abril de 2024 at 10:50 Apresentou esse erro: type mismatch on $ Postado Por: CAUAN_2024 Data Postagem: terça-feira, 16 de abril de 2024 at 10:59 tentei fazer dessa forma, mas acabou não validando: if SCK->CK_UM $ "BL" 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,400,400}) aadd(aQtdes, {401,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 return lRet restarea(aSCK) Postado Por: ROBERTOMEN Data Postagem: terça-feira, 16 de abril de 2024 at 12:09 bom dia Vi que tinha um espaço a mais aqui --> if ("BL" $ M-> CK_UM) tente if ("BL" $ M->CK_UM) Postado Por: CAUAN_2024 Data Postagem: terça-feira, 16 de abril de 2024 at 13:27 Boa tarde Deu o mesmo erro, eu anexei o print do erro para uma melhor visulização Postado Por: TCHULA Data Postagem: terça-feira, 16 de abril de 2024 at 14:12 Boa tarde. Uma pergunta, esta sua embalagem esta cadastrada no sistema correto? se Sim eu faria desta forma. Criaria um parametro, Ex. (MV_XEMBAL) e dentro desse parametro eu colocaria o codigo do cadastro da embalagem no sistema. Criaria meu if detsta forma. Local cVLQTDEM := GetMV("MV_XEMBAL) -> A variavel vai receber o conteudo do seu parametro no caso o codigo da sua embalagem cadastrada em sistema Seu if fivaria assim if(M->CK_UM $ cVLQTDEM) . . . EndIf Ve se te ajuda desta forma. Postado Por: CAUAN_2024 Data Postagem: terça-feira, 16 de abril de 2024 at 14:21 Boa tarde. Sim, já esta cadastrado no sistema, o campo é CK_UM, o código só iria verificar se é SC que esta no campo e ai sim, viria as validações para as sugestões de números. Postado Por: CAUAN_2024 Data Postagem: terça-feira, 16 de abril de 2024 at 14:21 Em uma explicação mais detalhada seria assim: se embalagem = saco .3 se cj_qtde < 55 entao msg ‘sugerir melhor quantidade = 55 se cj_qtde < 100 entao msg ‘sugerir melhor quantidade = 100 Postado Por: ROBERTOMEN Data Postagem: quarta-feira, 17 de abril de 2024 at 08:45 Bom dia. Cauan, entendi agora que vc está desenvolvendo uma função para validaçao de campo. Nos diga em que campo você incluiu a função e Anexe o fonte dela para entendermos o erro. Postado Por: CAUAN_2024 Data Postagem: quarta-feira, 17 de abril de 2024 at 09:30 Bom dia. Código anexado, eu inclui no campo CK_QTDVEN para quando o numero ser digitado, a função ira fazer as validações. Postado Por: ROBERTOMEN Data Postagem: quarta-feira, 17 de abril de 2024 at 10:55 segue correção: #INCLUDE "PROTHEUS.CH" #iNCLUDE "TBICONN.CH" #include "rwmake.ch" User function VldQtd() local lRet := .T. local aQtdes := {} local cQtd := M->CK_QTDVEN local ni if (M->CK_UM $ "BL") // (M->nCK_UM $ "BL") 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,400,400}) aadd(aQtdes, {401,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 return lRet Postado Por: CAUAN_2024 Data Postagem: quarta-feira, 17 de abril de 2024 at 11:33 Ainda da o erro de typemismatch no $, eu estava pensando se não teria outra função que valida o valor de uma coluna? Postado Por: ROBERTOMEN Data Postagem: quarta-feira, 17 de abril de 2024 at 14:12 descobri que a ROTINA DE ORÇAMENTOS criar uma tabela temporária TMP1 #INCLUDE "PROTHEUS.CH" #iNCLUDE "TBICONN.CH" #include "rwmake.ch" User function VldQtd() local lRet := .T. local aQtdes := {} local cQtd := TMP1->CK_QTDVEN local ni if TMP1->CK_UM = "BL" 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,400,400}) aadd(aQtdes, {401,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 return lRet ********************************************************************** Se precisar analisar todas as linhas dos itens, ao salvar por exemplo: ********************************************************************** While TMP1->(!EOF()) // análise TMP1->(dbskip()) ENDDO Postado Por: CAUAN_2024 Data Postagem: quarta-feira, 17 de abril de 2024 at 14:45 Muito obrigado, era isso mesmo!! |
Imprimir Página | Fechar Janela |