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 é TMP1, então para buscar valores nós usamos ela como referência ( TMP1-> ), 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.