- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Validação de Campo - regra para que não seja permitida a digitação de qtd que seja fora do múltiplo
×
Linguagem de Programação ADVPL
Perguntas Validação de Campo - regra para que não seja permitida a digitação de qtd que seja fora do múltiplo
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 10 meses atrás #9074
por kanaamlrr
Respondido por kanaamlrr no tópico Re: Validação de Campo - regra para que não seja permitida a digitação de qtd que seja fora do múltiplo
Deixa eu ver se eu entendi, o valor digitado no campo UB_QUANT deve ser múltiplo do valor que estiver no campo B1_QTD_MUL certo?
então utilize a expressão (_cProd % _nMultip), pois ela retorna o resto da divisão do valor _cProd pelo _nMultip
Simulando:
_cProd = 9
_nMultip = 3
resto da divisão será 0 (ZERO)
_cProd = 8
_nMultip = 3
resto da divisão será 2 (diferente de ZERO) ou seja, não múltiplo.
portanto o retorno da condição (_cProd % _nMultip)<>0 já atende a sua necessidade.
Adaptando o seu código ficaria:
dbSelectArea ("SB1")
dbSetOrder (1)
If dbSeek (xFilial ("SB1")+ _cProd)
_nMultip:= SB1->B1_QTMULT
EndIf
_cProd := aCols[n][_nPQtde]
If (_cProd % _nMultip)<>0
MsgAlert("Não é múltiplo")
Return (.F.)
Else
Return (.T.)
EndIF
então utilize a expressão (_cProd % _nMultip), pois ela retorna o resto da divisão do valor _cProd pelo _nMultip
Simulando:
_cProd = 9
_nMultip = 3
resto da divisão será 0 (ZERO)
_cProd = 8
_nMultip = 3
resto da divisão será 2 (diferente de ZERO) ou seja, não múltiplo.
portanto o retorno da condição (_cProd % _nMultip)<>0 já atende a sua necessidade.
Adaptando o seu código ficaria:
dbSelectArea ("SB1")
dbSetOrder (1)
If dbSeek (xFilial ("SB1")+ _cProd)
_nMultip:= SB1->B1_QTMULT
EndIf
_cProd := aCols[n][_nPQtde]
If (_cProd % _nMultip)<>0
MsgAlert("Não é múltiplo")
Return (.F.)
Else
Return (.T.)
EndIF
Por favor Acessar ou Registrar para participar da conversa.
- Alessandro Villar
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 121
- Obrigados Recebidos: 0
11 anos 10 meses atrás #9075
por Alessandro Villar
Respondido por Alessandro Villar no tópico Re: Validação de Campo - regra para que não seja permitida a digitação de qtd que seja fora do múltiplo
Seria isso mesmo, para eu entender, a expressão que você utiliza (_cProd % _nMultip), o que seria o "%"?
E na linha If dbSeek(xFilial("SB1") + _cProd), onde eu utilizo o _cProd eu teria que tratar ele não teria, pois eu não sei o que ele estaria puxando, ou estou enganado?
E na linha If dbSeek(xFilial("SB1") + _cProd), onde eu utilizo o _cProd eu teria que tratar ele não teria, pois eu não sei o que ele estaria puxando, ou estou enganado?
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 10 meses atrás #9077
por kanaamlrr
Respondido por kanaamlrr no tópico Re: Validação de Campo - regra para que não seja permitida a digitação de qtd que seja fora do múltiplo
o % é o operador "MOD" que realiza a divisão inteira e retorna o resto da divisão
ele faz o mesmo que a função MOD()
no caso, o seu seek deve ser pelo campo UB_PRODUTO, não sei de onde você está pegando a informação, e a divisão com o operador % deve ser do campo UB_QUANT (o que eu entendi que você está jogando na variável _cProd)
ele faz o mesmo que a função MOD()
no caso, o seu seek deve ser pelo campo UB_PRODUTO, não sei de onde você está pegando a informação, e a divisão com o operador % deve ser do campo UB_QUANT (o que eu entendi que você está jogando na variável _cProd)
Por favor Acessar ou Registrar para participar da conversa.
- Alessandro Villar
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 121
- Obrigados Recebidos: 0
11 anos 10 meses atrás #9085
por Alessandro Villar
Respondido por Alessandro Villar no tópico Re: Validação de Campo - regra para que não seja permitida a digitação de qtd que seja fora do múltiplo
Consegui finalizar aqui, muito obrigado pela ajuda cara, valeu mesmo, se você puder me passar seu e-mail para mantermos contato. eu corrigi e finalizei a rotina assim:
#include "rwmake.ch"
#include "protheus.ch"
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³RTMKE002 ºAutor ³Alessandro Villar º Data ³ 02/01/12 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ EXECBLOCK para que não seja permitida a digitação de º±±
±±º ³ quantidade que esteja fora do múltiplo definido no referidoº±±
±±º ³ campo no cadastro de produtos. º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ Protheus 11 - Específico para a empresa Arcolor º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function RTMKE002()
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Declaração de Variáveis ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Local _nMultip := 0
Local _lRet := .T.
Local _nPQtde := aScan(aHeader,{|x|AllTrim(x[02])=="UB_QUANT" }) // posiciona na coluna
Local _nPProd := aScan(aHeader,{|x|AllTrim(x[02])=="UB_PRODUTO"})
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Início da Rotina ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
_cProd := aCols[n][_nPProd]
dbSelectArea("SB1")
dbSetOrder(1)
If dbSeek(xFilial("SB1") + _cProd)
_nMultip := SB1->B1_QTMULT
EndIf
If (aCols[n][_nPQtde] % _nMultip)<>0 // Retorna o resto da divisão do valor _cProd pelo _nMultip
MsgAlert("Não é múltiplo")
Return (.F.)
Else
Return (.T.)
EndIf
Obrigado !!!
#include "rwmake.ch"
#include "protheus.ch"
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³RTMKE002 ºAutor ³Alessandro Villar º Data ³ 02/01/12 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ EXECBLOCK para que não seja permitida a digitação de º±±
±±º ³ quantidade que esteja fora do múltiplo definido no referidoº±±
±±º ³ campo no cadastro de produtos. º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ Protheus 11 - Específico para a empresa Arcolor º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function RTMKE002()
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Declaração de Variáveis ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Local _nMultip := 0
Local _lRet := .T.
Local _nPQtde := aScan(aHeader,{|x|AllTrim(x[02])=="UB_QUANT" }) // posiciona na coluna
Local _nPProd := aScan(aHeader,{|x|AllTrim(x[02])=="UB_PRODUTO"})
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Início da Rotina ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
_cProd := aCols[n][_nPProd]
dbSelectArea("SB1")
dbSetOrder(1)
If dbSeek(xFilial("SB1") + _cProd)
_nMultip := SB1->B1_QTMULT
EndIf
If (aCols[n][_nPQtde] % _nMultip)<>0 // Retorna o resto da divisão do valor _cProd pelo _nMultip
MsgAlert("Não é múltiplo")
Return (.F.)
Else
Return (.T.)
EndIf
Obrigado !!!
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 10 meses atrás #9087
por kanaamlrr
Respondido por kanaamlrr no tópico Re: Validação de Campo - regra para que não seja permitida a digitação de qtd que seja fora do múltiplo
Opa, por nada cara!
Meu skype é kanaamlrr, se quiser adiciona lá.
Eu costumo entrar só a noite, pois no trabalho é bloqueado.
Meu skype é kanaamlrr, se quiser adiciona lá.
Eu costumo entrar só a noite, pois no trabalho é bloqueado.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Validação de Campo - regra para que não seja permitida a digitação de qtd que seja fora do múltiplo
Tempo para a criação da página:0.087 segundos