Ativar ou desativar model conforme campo (MVC)

Bom dia!

Tenho um cadastro MVC contendo um model e uma view com duas estruturas ( Ficha e Rateio(grid) ) No modelo da ficha tem um campo de centro de custo.

Gostaria que se/quando o usuário digitar centro de custo (Ficha), o rateio(grid) fosse desabilitada para digitação. É possível ?

Os métodos da classe FWFormGridModel devem lhe auxiliar, existem métodos que permitem tornar o grid read only: FWFormGridModel - Frameworksp - TDN

Segue anexo imagem que demonstra os campos

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Diogo acho que pode funcionar da seguinte forma: 1) Criar um gatilho no campo Centro de Custo (Ficha) chamando uma função customizada. 2) Na função customizada você faria o seguinte tratamento:


oModel    := FWModelActive()
oGrid     := oModel:GetModel('MODEL_GRID')
If ! Empty(M->CAMPO_CC_FICHA)    //Se campo preenchido não permite alteração
    oGrid:ClearData()    //Limpa os dados digitados (acho que você precisa limpar caso o usuário já tenha digitado, ANALISE!)
    oGrid:SetNoInsertLine(.T.)    //Não insire linhas
    oGrid:SetNoUpdateLine(.T.)    //Não altera linhas
    oGrid:SetNoDeleteLine(.T.)    //Não deleta linhas
Else
    oGrid:SetNoInsertLine(.F.)    //Permite insirir linhas
    oGrid:SetNoUpdateLine(.F.)    //Permite alterar linhas
    oGrid:SetNoDeleteLine(.F.)    //Permite deletar linhas
EndIF

Obrigado pela ideia Cirilo!

Bom dia.

Segue uma solução utilizada por mim em uma situação parecida.

Dentro do ModelDef, crie uma validação para o campo:


oStruct:SetProperty('ZTC_CC', MODEL_FIELD_VALID, { || fVldCC() })

Na função utilizada no valid, faça a seguinte avaliação:


Static Function fVldCC
Local lRet        := .T.
Local oView        := FwViewActive()
Local oModel    := FwModelActive()

    If(!Empty(oModel:GetValue('ModelFicha','ZTC_CC')))

        // Limpa os dados da grid
        oModel:GetModel('ModelRateio'):ClearData(.F., .T.)

        // Bloqueia a inserção, alteração e exclusão de linhas na grid
        oModel:GetModel('ModelRateio'):SetNoInsertLine(.T.)
        oModel:GetModel('ModelRateio'):SetNoUpdateLine(.T.)
        oModel:GetModel('ModelRateio'):SetNoDeleteLine(.T.)

    Else

        // Limpa os dados da grid
        oModel:GetModel('ModelRateio'):ClearData(.F., .T.)

        // Habilita a inserção, alteração e exclusão de linhas na grid
        oModel:GetModel('ModelRateio'):SetNoInsertLine(.F.)
        oModel:GetModel('ModelRateio'):SetNoUpdateLine(.F.)
        oModel:GetModel('ModelRateio'):SetNoDeleteLine(.F.)

    EndIf

    oView:Refresh()

Return(lRet)

Importante ressaltar que o método ClearData limpa os dados na grid apenas visualmente, e não no banco de dados. Sendo assim, seu uso só deve ser feito se a operação do modelo for inclusão. Caso contrário, você deve varrer sua grid e deletar linha por linha.

Obrigado Giordano! Funcionou perfeitamente.