Boa tarde, Cirilo.
Pelo que entendi você quer detalhar o registro da grid.
Para o vinculo de uma Grid com um Field, gerei esse exemplo com a tabela SC6 (grid e detalhe).
Importante no relacionamento vincular todos os campos da chave, se a relação não estiver "completa", o conteúdo não aparecerá.
/*/{Protheus.doc} ModelDef
Modelo de dados
@type function
@version 1.0
@author Daniel Scheeren
@since 02/03/2023
/*/
Static Function ModelDef()
Local oModel := Nil
Local oStPai := FWFormStruct(1, 'SC5')
Local oStFilho := FWFormStruct(1, 'SC6')
Local oStNeto := FWFormStruct(1, 'SC6')
Local aFilhoRel := {}
Local aNetoRel := {}
Local bCommit := {|oModel| CommitLib(oModel) }
oModel := MPFormModel():New('TESTE01M', /*bPreValidacao*/, /*bTudoOK*/, bCommit, /*bCancel*/)
// componente pai
oModel:AddFields('SC5PAI',/*cOwner*/,oStPai, /*bPre*/, /*bPost*/, )
oModel:SetPrimaryKey({ 'C5_FILIAL' , 'C5_NUM'})
// componente grid filho
oModel:AddGrid('SC6FILHO','SC5PAI',oStFilho,/*bLinePre*/, /*bPosVld*/ ,/*bPre*/,/*bPos*/,/*bLoad*/)
// relacionamento entre o Pai e Filho
aAdd(aFilhoRel, {'C6_FILIAL','C5_FILIAL'})
aAdd(aFilhoRel, {'C6_NUM', 'C5_NUM'})
// monta o relacionamento entre Pai e Filho
oModel:SetRelation('SC6FILHO', aFilhoRel, SC6->(IndexKey(1)))
// componente neto
oModel:AddFields('SC6NETO','SC6FILHO',oStNeto, /*bPre*/, /*bPost*/, )
// relacionamento entre o Filho e Neto
aAdd(aNetoRel, {'C6_FILIAL' ,'FWxFilial("SC6")'})
// aqui vinculei ao registro da SC5, pois o campo C6_NUM por padrão não se encontra na estrutura gerada pela FWFormStruct
aAdd(aNetoRel, {'C6_NUM' ,'SC5->C5_NUM'})
aAdd(aNetoRel, {'C6_ITEM' ,'C6_ITEM'})
aAdd(aNetoRel, {'C6_PRODUTO','C6_PRODUTO'})
// monta o relacionamento entre Filho e Neto
oModel:SetRelation('SC6NETO', aNetoRel, SC6->(IndexKey(1)))
// descrição da tela
oModel:SetDescription("Exemplo pai x filho x neto")
Return oModel
/*/{Protheus.doc} ViewDef
Interface
@type function
@version 1.0
@author Daniel Scheeren
@since 02/03/2023
/*/
Static Function ViewDef()
Local aAreaSX3 := SX3->(GetArea())
Local oView := Nil
Local oModel := FWLoadModel('TESTE01')
Local oStPai := FWFormStruct(2, 'SC5')
Local oStFilho := FWFormStruct(2, 'SC6')
Local oStNeto := FWFormStruct(2, 'SC6')
// criando a View
oView := FWFormView():New()
oView:SetModel(oModel)
// componente pai
oView:AddField('VIEW_PAI',oStPai,'SC5PAI')
// componente filho
oView:AddGrid('VIEW_FILHO',oStFilho,'SC6FILHO')
// componente neto
oView:AddField('VIEW_NETO',oStNeto,'SC6NETO')
// seta o tamanho
oView:CreateHorizontalBox('CABEC',50)
oView:CreateHorizontalBox('GRID',25)
oView:CreateHorizontalBox('RODAPE',25)
// amarra a view x box
oView:SetOwnerView('VIEW_PAI','CABEC')
oView:SetOwnerView('VIEW_FILHO','GRID')
oView:SetOwnerView('VIEW_NETO','RODAPE')
// habilita título de cada view
oView:EnableTitleView( 'VIEW_PAI', "Pedido de venda" )
oView:EnableTitleView( 'VIEW_FILHO', "Itens" )
RestArea(aAreaSX3)
Return oView
Caso queira vincular outra tabela, por exemplo Detalhe pai (SC5), Grid filho (SC6) e detalhe neto (SB1), o exemplo também atende.