× Linguagem de Programação ADVPL

Perguntas Gatilho

Mais
11 anos 3 meses atrás #9314 por andrelanzieri
Gatilho foi criado por andrelanzieri
Pessoal criei o seguinte gatilho que ativa no campo ZY_INSPAPV e passa um valor para o campo ZY_RNC
com a seguinte regra:

IF(ALLTRIM(M->ZY_INSPAPV)$'NC',GetSXEnum("SZY","ZY_RNC"),"")

No campo ZY_INSPAPV possui 3 opções, SIM, NAO e CONDICIONAL
Se Sim, ele não preenche o campo RNC que está bloqueado.
Se Não ou CONDICIONAL, ele pega o ultimo valor no SZY e autoincrementa normalmente.
Porem achei um problema, quando o usuário muda de NÃO para CONDICIONAL e vice-versa o ZY_RNC vai auto-incrementando

Exemplo: O usuário coloca NÃO na opção do campo ZY_INSPAPV ele autoincrementa para 002 no ZY_RNC, OK CORRETO.
Agora se o usuário muda para CONDICIONAL o valor autoincrementa novamente!!Onde vai para 003. E se colocar NÃO novamente ele incrementa 004 novamente e vai autoincrementando ao indo trocando a opção.
Alguem tem alguma sugestão de como posso resolver ?

Obrigado.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 3 meses atrás #9316 por kanaamlrr
Respondido por kanaamlrr no tópico Re: Gatilho
Você pode colocar na regra uma função customizada sua.

Com base nessa função você cria uma variável estática de controle.

Por exemplo:
Static lPriVez := .T.

User Function suaFuncao()
Local cRet := ""

cRet := IF(ALLTRIM(M->ZY_INSPAPV)$'NC' .AND. lPriVez,GetSXEnum("SZY","ZY_RNC"),SZY->ZY_RNC) 
lPriVez := .F.

Return cRet

Não sei se está totalmente certo, não testei.
Depois disso, no final da sua inclusão, sempre atrubiur .T. para a variável lPriVez para garantir que ele funcione corretamente na inclusão seguinte.

Testa ai e posta pra gente se deu certo.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 3 meses atrás #9319 por andrelanzieri
Respondido por andrelanzieri no tópico Re: Gatilho
Ok! hoje não vou conseguir testar, mas posto aqui assim que testar.
Obrigado!!

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 3 meses atrás #9348 por lalberto
Respondido por lalberto no tópico Re: Gatilho
Andre o problema de se utilizar o GetSXeNUM é que se houver algum cancelamento é necessário rodar a função rollbacksxe() para ele voltar a numeracao, sem isso ele sempre vai incrementar, o ideal é como o kanaãm passou é montar uma função especifica para este tratamento, pois tratar isso via gatilho fica muito limitado ok.

Abraços.

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br

Por favor Acessar ou Registrar para participar da conversa.

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