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