Árvore de páginas

P200VALID - Validação da estrutura ao confirmar

Linha de Produto:

Protheus

Segmento:

Manufatura

Módulo:

SIGAPCP - Planejamento e Controle da Produção

Parâmetro(s):

NomeTipoDescriçãoDefaultObrigatórioReferência
PARAMIXB[1]ObjetoModelo Principal (Mestre)


PARAMIXB[2]ObjetoObjeto Json com as alterações realizadas na estrutura


Idiomas:

Todos

País(es):

Todos

Banco(s) de Dados:

Todos

Sistema(s) Operacional(is):

Todos

Ponto de Entrada

Descrição:
O ponto de entrada P200VALID é executado após as validações padrões do programa de estrutura (PCPA200).
Localização:

Function ModelPosVld - Função de validação do modelo de dados do PCPA200

Eventos:

Ao confirmar uma Inclusão, Alteração ou Exclusão de alguma estrutura usando o modelo do PCPA200.

Programa Fonte:PCPA200EVDEF.PRW

Sintaxe:

P200VALID( [ oModel ], [ oDados] ) --> lRet

Retorno:

lRet - Indica se a operação pode ser confirmada ou não. Retorno obrigatório do tipo Lógico. 

Observações:

Este ponto de entrada é chamado na validação do modelo do PCPA200.

Sendo assim, qualquer rotina que manipule uma estrutura utilizando o modelo do PCPA200 executará esse ponto de entrada, mesmo que a rotina não possua interface gráfica. Portando, componentes gráficos devem ser evitados ou, pelo menos, tratados dentro desse ponto de entrada.

Exemplo
#Include "Totvs.ch"

User Function P200VALID()
	Local oModel := ParamixB[1]  //Modelo Principal (Mestre)
	Local oDados := ParamixB[2]  //Objeto Json com todas as alterações realizadas na estrutura
	Local lRet   := .T.
/*
	oDados                                     -> Json com as alterações
	oDados["oLinDel"]                          -> Json com as linhas que foram alteradas (indicando se foi excluída)
	oDados["oLinDel"][<Pai+Comp+Trt>]          -> Se estiver como .T., indica que o componente foi removido durante a execução
	oDados["oLines" ]                          -> Json com as linhas que foram alteradas (com os novos valores que serão gravados)
	oDados["oLines" ][<Pai+Comp+Trt>]          -> Array com os valores que serão salvos em cada campo do campo do cadastro (as posições devem ser resgatadas através do oDados["oFields"])
	oDados["oLines" ][<Pai+Comp+Trt>][<Field>] -> Novo valor para o campo (se não foi alterado, retornará o valor atual)
	oDados["oFields"]                          -> Json com os campos do cadastro para buscar seus respectivos índices do array contido em oDados["oLines"]
	oDados["oFields"][<Field>]                 -> Índice do campo (Field) no array das alterações (oDados["oLines"])
*/
	//Valida o modelo principal (SG1_MASTER)
	If !VldMaster(oModel)
		lRet := .F.
	EndIf

	//Valida os componentes que tiveram alteração
	If lRet .And. !VldAlters(oDados)
		lRet := .F.
	EndIf

Return lRet

//----------------------------------------//
// Valida o modelo principal (SG1_MASTER) //
//----------------------------------------//
Static Function VldMaster(oModel)
	Local lRet := .T.

	//Verifica se o campo "Quantidade Base" está diferente de 1
	If oModel:GetModel("SG1_MASTER"):GetValue("NQTBASE") <> 1
		Help( ,  , 'PE P200VALID', , "Quantidade Base incorreta.", 1, 0, , , , , , {"Informe a Quantidade Base como 1."})
		lRet := .F.
	EndIf

Return lRet

//---------------------------------------------//
// Valida os componentes que tiveram alteração //
//---------------------------------------------//
Static Function VldAlters(oDados)
	Local aLines  := {}
	Local lRet    := .T.
	Local nIndex  := 0
	Local oLinDel := oDados["oLinDel"] //Identifica os componentes que foram excluídos
	Local oLines  := oDados["oLines"]  //Identifica os componentes que foram alterados
	Local oFields := oDados["oFields"] //Campos da grid de componentes

	//Busca todos os componentes que podem ter sido alterados
	aLines := oLines:GetNames()

	//Percorre cada componente
	For nIndex := 1 To Len(aLines)

		//Verifica se o componente realmente foi alterado
		If !Empty(oLines[aLines[nIndex]])

			//Verifica se o componente foi removido
			If oLinDel[aLines[nIndex]]
				Help( ,  , 'PE P200VALID', , "Não é permitido excluir componentes.", 1, 0, , , , , , {"Desfaça a exclusão do componente."})
				lRet := .F.
				Exit
			EndIf

			//Verifica se o campo "Sequência" (TRT) do componente foi preenchido
			If Empty(oLines[aLines[nIndex]][oFields["G1_TRT"]])
				Help( ,  , 'PE P200VALID', , "Sequência (TRT) não informada.", 1, 0, , , , , , {"Informe uma Sequência (TRT) para o componente."})
				lRet := .F.
				Exit
			EndIf
		EndIf
	Next nIndex

Return lRet
  • Sem rótulos