Como atualizar informações de um orçamento através do valid de um campo

Hoje vou mostrar uma dica de como atualizar informações da grid de um orçamento de venda via AdvPL.

Geralmente quando fazemos um valid de usuário, um ponto de entrada ou um gatilho que precise atualizar dados de uma grid, temos 3 formas principais de se fazer:

  • Manipular direto o aCols em gris antigas
  • Utilizar referência do M-> (em caso de RegToMemory)
  • Se for em MVC, manipular direto o model da grid ou usar FWFldGet

Porém na tela de orçamentos de vendas, ela utiliza um conceito diferente de tela, ela cria uma tabela temporária para ser usada na grid.

O nome dessa temporária é TMPK1, então para buscar valores nós usamos ela como referência ( TMPK1-> ), e se quisermos manipular, utilizamos RecLock.

Abaixo um exemplo de uma função acionada na validação ao digitar o preço de venda:

User Function zVldCampo()
	Local aArea    := GetArea()
	Local aAreaCJ  := SCJ->(GetArea())
	Local aAreaCK  := SCK->(GetArea())
	Local cTabAtu  := M->CJ_TABELA
	Local cCodProd := ""
	Local nPrcProd := 0
	Local lRet     := .T.
	
	//Se tiver tabela de preço preenchida
	If ! Empty(cTabAtu)
		DbSelectArea('DA1')
		DA1->(DbSetOrder(1)) //DA1_FILIAL+DA1_CODTAB+DA1_CODPRO+DA1_INDLOT+DA1_ITEM
		DA1->(DbGoTop())
		
		//Pega as informações do produto da grid e preço
		cCodProd := TMP1->CK_PRODUTO
		nPrcProd := TMP1->CK_PRCVEN
	
		//Se conseguir posicionar na tabela de preço + produto
		If DA1->(DbSeek(FWxFilial('DA1') + cTabAtu + cCodProd ))
			//Verifica se o preço do produto no orçamento é maior que o preço máximo da tabela
			If nPrcProd > DA1->DA1_PRCMAX
				lRet := .F.
				MsgStop("Preço digitado maior que o preço máximo!", "Atenção")
				
			//Senão verifica se é menor que o preço de venda
			ElseIf nPrcProd < DA1->DA1_PRCVEN
				lRet := .F.
				MsgStop("Preço digitado menor que o preço padrão!", "Atenção")
			EndIf
		EndIf
	EndIf
	
	RestArea(aAreaCK)
	RestArea(aAreaCJ)
	RestArea(aArea)
Return lRet

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta