- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Deixar campo obrigatório de acordo com condição em tempo de execução | Sem Ponto de Entrada Série 3
×
Linguagem de Programação ADVPL
Perguntas Deixar campo obrigatório de acordo com condição em tempo de execução | Sem Ponto de Entrada Série 3
- simoes
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 51
- Obrigados Recebidos: 0
7 anos 10 meses atrás #31663
por simoes
Deixar campo obrigatório de acordo com condição em tempo de execução | Sem Ponto de Entrada Série 3 foi criado por simoes
Boa tarde,
Alguém pode me ajudar ?
Trabalhamos com p11 série 3
Eu precisava fazer o seguinte na tabela SA3 (Cadastro de Vendedor) quero testar A3_XFORM (campo que criei) se ele igual a 'B' deixa o o A3_ALEMISS fica obrigatório senão se A3_XFORM igual a 'E' o A3_ALBAIXA fica obrigatório e se A3_XFORM igual a 'A' os dois ficam obrigatórios, resumindo quero deixar ou não um campo com preenchimento obrigatório, de acordo com uma condição.
Alguém pode me ajudar?
Desde já grato.
Alguém pode me ajudar ?
Trabalhamos com p11 série 3
Eu precisava fazer o seguinte na tabela SA3 (Cadastro de Vendedor) quero testar A3_XFORM (campo que criei) se ele igual a 'B' deixa o o A3_ALEMISS fica obrigatório senão se A3_XFORM igual a 'E' o A3_ALBAIXA fica obrigatório e se A3_XFORM igual a 'A' os dois ficam obrigatórios, resumindo quero deixar ou não um campo com preenchimento obrigatório, de acordo com uma condição.
Alguém pode me ajudar?
Desde já grato.
Por favor Acessar ou Registrar para participar da conversa.
- admin
- Desconectado
- Administrador
Menos
Mais
- Postagens: 297
- Obrigados Recebidos: 21
7 anos 10 meses atrás #31675
por admin
Respondido por admin no tópico Deixar campo obrigatório de acordo com condição em tempo de execução | Sem Ponto de Entrada Série 3
No campo X3_VLDUSER do campo A3_ALEMISS Coloca:
Iif(M->A3_XFORM$'B*A',M->A3_ALEMISS>0,.T.)
No campo X3_VLDUSER do campo A3_ALBAIXA Coloca:
Iif(M->A3_XFORM$'E*A',M->A3_ALBAIXA>0,.T.)
VEJA SE FUNFA, NÃO TESTEI.
Iif(M->A3_XFORM$'B*A',M->A3_ALEMISS>0,.T.)
No campo X3_VLDUSER do campo A3_ALBAIXA Coloca:
Iif(M->A3_XFORM$'E*A',M->A3_ALBAIXA>0,.T.)
VEJA SE FUNFA, NÃO TESTEI.
Por favor Acessar ou Registrar para participar da conversa.
- simoes
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 51
- Obrigados Recebidos: 0
7 anos 10 meses atrás - 7 anos 10 meses atrás #31678
por simoes
Respondido por simoes no tópico Deixar campo obrigatório de acordo com condição em tempo de execução | Sem Ponto de Entrada Série 3
Boa tarde,
Então eu fiz desse jeito não deu certo não, ai fiz de um jeito similar só que em fonte pra ficar até mais fácil de entender e coloquei a função no campo X3_VLDUSER do campo A3_ALEMISS a chamada da função Obrig(), até ai beleza.
Só que tenho um problema, se eu informar o campo A3_XFORM com 'E' (EMISSAO) entrar no campo A3_ALEMISS e tentar sair dele sem informar nenhum valor, a validação funciona e não deixa sair do campo enquanto um valor não for informado, mas se eu informar o campo A3_XFORM com 'E', mas não entrar no campo A3_ALEMISS e já confirmar o cadastro, o cadastro é confirmado sem nenhum problema não entrando na validação do campo A3_ALEMISS
Pode me ajudar com isso? ( Sem Ponto de Entrada )
Então eu fiz desse jeito não deu certo não, ai fiz de um jeito similar só que em fonte pra ficar até mais fácil de entender e coloquei a função no campo X3_VLDUSER do campo A3_ALEMISS a chamada da função Obrig(), até ai beleza.
Só que tenho um problema, se eu informar o campo A3_XFORM com 'E' (EMISSAO) entrar no campo A3_ALEMISS e tentar sair dele sem informar nenhum valor, a validação funciona e não deixa sair do campo enquanto um valor não for informado, mas se eu informar o campo A3_XFORM com 'E', mas não entrar no campo A3_ALEMISS e já confirmar o cadastro, o cadastro é confirmado sem nenhum problema não entrando na validação do campo A3_ALEMISS
Pode me ajudar com isso? ( Sem Ponto de Entrada )
#include "protheus.ch"
user function Obrig()
cCondi := M->A3_XFORM
lRetorno := .T.
// Alert("ENTROU NA FUNCAO")
if(cCondi == "E".AND. A3_ALEMISS == 0)
Alert("Campo A3_ALEMISS é obrigatório")
lRetorno := .F.
endif
return lRetorno
Ultima edição: 7 anos 10 meses atrás por simoes.
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
7 anos 10 meses atrás #31679
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 Deixar campo obrigatório de acordo com condição em tempo de execução | Sem Ponto de Entrada Série 3
Retira estas validações e compila este ponto de entrada que fiz pra vc.
Veja se funciona agora.
Veja se funciona agora.
User Function MA040TOK()
Local aArea := GetArea()
If M->A3_XFORM $ "B" .And. Empty(M->A3_ALEMISS)
MsgStop("Atenção, Preencher o Campo Percentual na Emissão !")
Return .f.
Endif
If M->A3_XFORM $ "E" .And. Empty(M->A3_ALBAIXA)
MsgStop("Atenção, Preencher o Campo Percentual na Baixa !")
Return .f.
Endif
If M->A3_XFORM $ "A" .And. (Empty(M->A3_ALBAIXA) .Or. Empty(M->A3_ALEMISS))
MsgStop("Atenção, Preencher os Campo Percentual na Emissão e Percentual na Baixa !")
Return .f.
Endif
RestArea(aArea)
Return .t.
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.
- simoes
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 51
- Obrigados Recebidos: 0
7 anos 10 meses atrás - 7 anos 10 meses atrás #31681
por simoes
Respondido por simoes no tópico Deixar campo obrigatório de acordo com condição em tempo de execução | Sem Ponto de Entrada Série 3
Bom dia
Então amigo a série 3 não permite a inclusão de Pontos de Entrada nos programas.
Att
Então amigo a série 3 não permite a inclusão de Pontos de Entrada nos programas.
Att
Ultima edição: 7 anos 10 meses atrás por simoes.
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
7 anos 10 meses atrás - 7 anos 10 meses atrás #31682
por kanaamlrr
Respondido por kanaamlrr no tópico Deixar campo obrigatório de acordo com condição em tempo de execução | Sem Ponto de Entrada Série 3
Boa tarde Sulivan,
Tente utilizar a sua função no valid do campo customizado A3_XFORM e compile o código abaixo
Apenas clareando um pouco o código, o array aGets é responsável por gerenciar os elementos de tela da enchoice.
Eu apenas estou alterando ele em tempo de execução para que na hora que você tentar gravar o registro ele consultar o array e ver que o campo é obrigatório ou não.
Depois dê um retorno se funcionou.
Abraço!
Tente utilizar a sua função no valid do campo customizado A3_XFORM e compile o código abaixo
#include "protheus.ch"
User Function Obrig()
Local _nPosEmiss := aScan(aGets, {|x| SubStr(x,9,10)=="A3_ALEMISS"})
Local _nPosBaixa := aScan(aGets, {|x| SubStr(x,9,10)=="A3_ALBAIXA"})
If M->A3_XFORM == "B"
aGets[_nPosEmiss] := Left(aGets[_nPosEmiss],24)+"T"+Right(aGets[_nPosEmiss],2)
aGets[_nPosBaixa] := Left(aGets[_nPosBaixa],24)+"F"+Right(aGets[_nPosBaixa],2)
ElseIf M->A3_XFORM == "E"
aGets[_nPosEmiss] := Left(aGets[_nPosEmiss],24)+"F"+Right(aGets[_nPosEmiss],2)
aGets[_nPosBaixa] := Left(aGets[_nPosBaixa],24)+"T"+Right(aGets[_nPosBaixa],2)
ElseIf M->A3_XFORM == "A"
aGets[_nPosEmiss] := Left(aGets[_nPosEmiss],24)+"T"+Right(aGets[_nPosEmiss],2)
aGets[_nPosBaixa] := Left(aGets[_nPosBaixa],24)+"T"+Right(aGets[_nPosBaixa],2)
Else
aGets[_nPosEmiss] := Left(aGets[_nPosEmiss],24)+"F"+Right(aGets[_nPosEmiss],2)
aGets[_nPosBaixa] := Left(aGets[_nPosBaixa],24)+"F"+Right(aGets[_nPosBaixa],2)
EndIf
Return .T.
Apenas clareando um pouco o código, o array aGets é responsável por gerenciar os elementos de tela da enchoice.
Eu apenas estou alterando ele em tempo de execução para que na hora que você tentar gravar o registro ele consultar o array e ver que o campo é obrigatório ou não.
Depois dê um retorno se funcionou.
Abraço!
Ultima edição: 7 anos 10 meses atrás por kanaamlrr.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Deixar campo obrigatório de acordo com condição em tempo de execução | Sem Ponto de Entrada Série 3
Tempo para a criação da página:0.120 segundos