Boa noite!
Estou reformulando uma rotina e estou tendo dificuldades ao implementar um controle na grid do MVC.
Estou anexando uma foto e parte do código abaixo:
User Function ELFATA34
Local aArea := GetArea()
Local oBrowse := FwMBrowse():New()
Private cCadastro := 'Conta Corrente de Fornecedores'
Private aRotina := MenuDef()
oBrowse:SetAlias('ZKA')
oBrowse:OptionReport(.F.)
oBrowse:SetDescription(cCadastro)
oBrowse:AddLegend("ZKA_STATUS == '1'", 'BR_VERDE' , 'Competência em Aberto')
oBrowse:AddLegend("ZKA_STATUS == '2'", 'BR_VERMELHO', 'Competência Fechada')
oBrowse:Activate()
RestArea(aArea)
Return
Static Function MenuDef()
Local aRotina := {}
Add Option aRotina Title 'Pesquisar' Action 'AxPesqui' Operation 1 Access 0
Add Option aRotina Title 'Visualizar' Action 'VIEWDEF.ELFATA34' Operation 2 Access 0
Add Option aRotina Title 'Incluir' Action 'VIEWDEF.ELFATA34' Operation 3 Access 0
Add Option aRotina Title 'Alterar' Action 'VIEWDEF.ELFATA34' Operation 4 Access 0
Add Option aRotina Title 'Excluir' Action 'VIEWDEF.ELFATA34' Operation 5 Access 0
Add Option aRotina Title 'Imprimir' Action 'VIEWDEF.ELFATA34' Operation 8 Access 0
Return(aRotina)
Static Function ModelDef
Local oModel := Nil
Local oStruHead := FwFormStruct(1,'ZKA')
Local oStruGrid := FwFormStruct(1,'ZKB')
//Monta o modelo principal
oModel := MpFormModel():New('CCFMVC',/*Pre-Validacao*/,/*Validação*/,/*Pós-Validação*/)
oModel:SetDescription(cCadastro)
//Monta os dados do cabeçalho
oModel:AddFields('ModelHead',,oStruHead)
oModel:SetPrimaryKey({'ZKA_FILIAL','ZKA_MESANO','ZKA_CODFAB'})
oModel:GetModel('ModelHead'):SetDescription(cCadastro)
oStruHead:SetProperty('ZKA_MESANO', MODEL_FIELD_WHEN, {|| INCLUI})
oStruHead:SetProperty('ZKA_CODFAB', MODEL_FIELD_WHEN, {|| INCLUI})
//Monta os dados dos itens
oModel:AddGrid('ModelGrid','ModelHead',oStruGrid,,{|oGrid| fLinOK(oGrid)},/*bPreGrid*/,/*bProsGrid*/)
oModel:SetRelation('ModelGrid',{{'ZKB_FILIAL','ZKA_FILIAL'},{'ZKB_MESANO','ZKA_MESANO'},{'ZKB_CODFAB','ZKA_CODFAB'}}, ZKB->(IndexKey(1)) )
oModel:GetModel('ModelGrid'):SetDescription('Itens')
oModel:GetModel('ModelGrid'):SetDelAllLine(.T.)
oModel:GetModel('ModelGrid'):SetOptional(.F.)
Return(oModel)
Static Function ViewDef
Local oView := Nil
Local oModel := FwLoadModel('ELFATA34')
Local oStruHead := FwFormStruct(2,'ZKA')
Local oStruGrid := FwFormStruct(2,'ZKB')
//Não exibe o folder visual caso algum campo esteja inserido em um
oStruHead:SetNoFolder()
oView:= FwFormView():New()
oView:SetModel(oModel)
//Crio o cabeçalho e os grids de acordo com o modelo
oView:AddField('ViewHead', oStruHead, 'ModelHead')
oView:AddGrid ('ViewGrid', oStruGrid, 'ModelGrid')
//Crio uma layer com 30% da tela e outra com 70% da tela, similar a FwLayer
oView:CreateHorizontalBox('MAIN',30)
oView:CreateHorizontalBox('GRID',70)
//Informo os devidos títulos das telas
oView:EnableTitleView('ViewHead','Resumo do Conta Corrente')
oView:EnableTitleView('ViewGrid','Movimentações do Conta Corrente')
//Informo a porcentagem da tela que cada view deve ocupar
oView:SetOwnerView('ViewHead','MAIN')
oView:SetOwnerView('ViewGrid','GRID')
Return(oView)
Static Function fLinOK(oGrid)
Local nX
Local nValTot := 0
Local oModel := FwModelActive()
oGrid:GoLine(oGrid:nLine)
If(oGrid:GetValue('ZKB_ORIGEM') == 'A')
Help(,,'Não é permitida a alteração',,'Não é permitida a alteração de lançamentos de origem automática!',1,0,,,,,,{'Caso necessite, efetue o recálculo dos valores através de Outras Ações > Calc. Moviment.'})
Return .F.
Endif
If(oModel:GetValue('ModelHead','ZKA_STATUS') == '2')
Help(,,'Não é permitida a alteração',,'Não é permitida a alteração de um conta corrente com competência fechada!',1,0,,,,,,)
Return .F.
Endif
For nX := 1 To oGrid:GetQtdLine()
oGrid:GoLine(nX)
If(!oGrid:IsDeleted())
If(oGrid:GetValue('ZKB_RECPAG') == 'C')
nValTot += oGrid:GetValue('ZKB_VALOR')
Else
nValTot -= oGrid:GetValue('ZKB_VALOR')
Endif
Endif
Next
oModel:SetValue('ModelHead','ZKA_SALPER',nValTot)
oModel:SetValue('ModelHead','ZKA_SALATU',oModel:GetValue('ModelHead','ZKA_SALANT') + nValTot)
Return .T.
Observe a imagem em anexo, caso aquela movimentação possuir a origem como A - Automático, o usuário só vai poder alterar o campo Obs. Movime. (ZKB_OBSERV). Demais campos o mesmo não vai poder alterar.
Consegui efetuar um controle de forma que o mesmo não consiga alterar nenhum campo caso a origem seja A, mas preciso também criar uma validação de forma que o sistema não critique caso a mudança seja feita no campo Obs. Movime.
Caso a movimentação possuir a origem for M - Manual, o usuário tem liberdade de alterar qualquer campo que desejar na grid.
Alguém saberia uma forma de como posso estar efetuando essa validação?
Agradeço desde já pela atenção.