×
Linguagem de Programação ADVPL
Perguntas Gatilho
- andrelanzieri
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 29
- Obrigados Recebidos: 0
11 anos 10 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.
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 10 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:
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.
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.
- andrelanzieri
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 29
- Obrigados Recebidos: 0
11 anos 10 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!!
Obrigado!!
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
11 anos 10 meses atrás #9348
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
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.
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.122 segundos