× 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

Mais
11 anos 10 meses atrás #9074 por kanaamlrr
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

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 10 meses atrás #9075 por Alessandro Villar
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?

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 10 meses atrás #9077 por kanaamlrr
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)

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 10 meses atrás #9085 por Alessandro Villar
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 !!! :)

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 10 meses atrás #9087 por kanaamlrr
Opa, por nada cara!
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.

Tempo para a criação da página:0.087 segundos
Joomla templates by a4joomla