× 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

Mais
7 anos 3 meses atrás #31663 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.

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 3 meses atrás #31675 por admin
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.

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 3 meses atrás - 7 anos 3 meses atrás #31678 por simoes
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 )
#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 3 meses atrás por simoes.

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 3 meses atrás #31679 por lalberto
Retira estas validações e compila este ponto de entrada que fiz pra vc.

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.

Mais
7 anos 3 meses atrás - 7 anos 3 meses atrás #31681 por simoes
Bom dia

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 3 meses atrás por simoes.

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 3 meses atrás - 7 anos 3 meses atrás #31682 por kanaamlrr
Boa tarde Sulivan,
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 3 meses atrás por kanaamlrr.

Por favor Acessar ou Registrar para participar da conversa.

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