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:
Substring
Versão:
11.8
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
Captura de tela 2024-04-16 132616.png (anexo)
VldQtd.PRW (anexo)
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 CAUAN_2024 em 15/04/2024, 09:02 h
Local: SP  Registro: 28/02/2024  Postagens: 34
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

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 15/04/2024, 10:11 h
Local: PR  Registro: 04/07/2017  Postagens: 465
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)

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 CAUAN_2024 em 15/04/2024, 10:50 h
Local: SP  Registro: 28/02/2024  Postagens: 34
Apresentou esse erro: type mismatch on $

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 CAUAN_2024 em 16/04/2024, 10:59 h
Local: SP  Registro: 28/02/2024  Postagens: 34
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)

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 16/04/2024, 12:09 h
Local: PR  Registro: 04/07/2017  Postagens: 465

bom dia

Vi que tinha um espaço a mais aqui --> if ("BL" $ M-> CK_UM)

tente


if ("BL" $ M->CK_UM)

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 CAUAN_2024 em 16/04/2024, 13:27 h
Local: SP  Registro: 28/02/2024  Postagens: 34
Boa tarde

Deu o mesmo erro, eu anexei o print do erro para uma melhor visulização

Mensagem do Enviar e-mail Abrir o Perfil do usuário TCHULA TCHULA em 16/04/2024, 14:12 h
Local: SP  Registro: 02/10/2014  Postagens: 49
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.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 CAUAN_2024 em 16/04/2024, 14:21 h
Local: SP  Registro: 28/02/2024  Postagens: 34
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.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 CAUAN_2024 em 16/04/2024, 14:21 h
Local: SP  Registro: 28/02/2024  Postagens: 34
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

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 17/04/2024, 08:45 h
Local: PR  Registro: 04/07/2017  Postagens: 465
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.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 CAUAN_2024 em 17/04/2024, 09:30 h
Local: SP  Registro: 28/02/2024  Postagens: 34
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.

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 17/04/2024, 10:55 h
Local: PR  Registro: 04/07/2017  Postagens: 465
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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 CAUAN_2024 em 17/04/2024, 11:33 h
Local: SP  Registro: 28/02/2024  Postagens: 34
Ainda da o erro de typemismatch no $, eu estava pensando se não teria outra função que valida o valor de uma coluna?

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 17/04/2024, 14:12 h
Local: PR  Registro: 04/07/2017  Postagens: 465
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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CAUAN_2024 CAUAN_2024 em 17/04/2024, 14:45 h
Local: SP  Registro: 28/02/2024  Postagens: 34
Muito obrigado, era isso mesmo!!

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