FwBrowse criado com query não edita nenhum campo

Boa noite, criei duas grids que são populadas por duas consultas e relacionadas pela classe FWBrwRelation, foi adicionado as colunas (FWBrwColumn) a configuração oColumn:SetEdit(.T.) e na FWBrowse a função para permitir a edição de campos (SetEditCell(.T., {|| .T.})) porém não estou conseguindo editar nenhum campo da grid por nada.

Estou utilizando a forma de criar com base em uma query pois foi como consegui criar o relacionamento entre as duas grid's.

Alguem já passou por isso e conseguiu resolver, ou alguma orientação de como fazer.

Segue o fonte abaixo


User Function FFRT004()
    Local aArea := GetArea()
    //Fontes
    Local cFontUti    := "Tahoma"
    Local oFontAno    := TFont():New(cFontUti,,-38)
    Local oFontSub    := TFont():New(cFontUti,,-20)
    Local oFontSubN   := TFont():New(cFontUti,,-20,,.T.)
    Local oFontBtn    := TFont():New(cFontUti,,-14)
    //Janela e componentes
    Private oDlgGrp
    Private oPanGrid
    Private oPanGrid2
    Private oLeftGrd
    Private oRightGrd
    Private aColLeft := {}
    Private aColRight := {}
    Private cAliasTab1 := "LFT"
    Private cAliasTab2 := "RGT"
    //Tamanho da janela
    Private    aTamanho := MsAdvSize()
    Private    nJanLarg := aTamanho[5]
    Private    nJanAltu := aTamanho[6]
    Private    nMJLarg  := nJanLarg/2   // Largura da metade da janela

    Private QryLeft := ""
    Private QryRight := ""

    //Monta o cabecalho
    fMontaHead('L')
    fMontaHead('R')

    //Montando os dados, eles devem ser montados antes de ser criado o FWBrowse
    FWMsgRun(, {|oSay| QryLeft := fMontDados(oSay, 'L') }, "Processando", "Buscando fornecedores")
    FWMsgRun(, {|oSay| QryRight := fMontDados(oSay, 'R') }, "Processando", "Buscando placas")

    //Criando a janela
    DEFINE MSDIALOG oDlgGrp TITLE "Gerar Financeiro Frete" FROM 000, 000  TO nJanAltu, nJanLarg COLORS 0, 16777215 PIXEL
    //Labels gerais
    @ 004, 100 SAY "Consolidar"                 SIZE 200, 030 FONT oFontSub  OF oDlgGrp COLORS RGB(031,073,125) PIXEL
    @ 014, 100 SAY "Fechamento de Frete"        SIZE 200, 030 FONT oFontSubN OF oDlgGrp COLORS RGB(031,073,125) PIXEL

    //Botões
    @ 006, (nJanLarg/2-001)-(0052*01) BUTTON oBtnFech  PROMPT "Fechar"        SIZE 050, 018 OF oDlgGrp ACTION (oDlgGrp:End())   FONT oFontBtn PIXEL

    //Fornecedores
    @ 024, 003 GROUP oGrpL TO (nJanAltu/2-003), (nMJLarg/2-003) PROMPT "Fornecedores" OF oDlgGrp COLOR 0, 16777215 PIXEL
    oGrpL:oFont := oFontBtn
    oPanGrid := tPanel():New(033, 006, "", oDlgGrp, , , , RGB(000,000,000), RGB(254,254,254), (nJanLarg/4 - 12),     (nJanAltu/2 - 45))
    oLeftGrd := FWBrowse():New()
    oLeftGrd:DisableFilter()
    oLeftGrd:DisableConfig()
    oLeftGrd:DisableReport()
    oLeftGrd:DisableSeek()
    oLeftGrd:DisableSaveConfig()
    oLeftGrd:SetFontBrowse(oFontBtn)
    oLeftGrd:SetAlias(cAliasTab1)
    oLeftGrd:SetDataQuery()
    oLeftGrd:SetQuery(QryLeft)
    oLeftGrd:SetEditCell(.T., {|| .T.})
    oLeftGrd:lHeaderClick := .F.
    oLeftGrd:SetColumns(aColLeft)
    oLeftGrd:SetOwner(oPanGrid)
    oLeftGrd:Activate()

    //Placas
    @ 024, (nMJLarg/2) GROUP oGrpR TO (nJanAltu/2-003), (nMJLarg-006) PROMPT "Placas" OF oDlgGrp COLOR 0, 16777215 PIXEL
    oGrpR:oFont := oFontBtn
    oPanGrid2 := tPanel():New(033, (nMJLarg/2+003), "", oDlgGrp, , , , RGB(000,000,000), RGB(254,254,254), (nJanLarg/4 - 12),     (nJanAltu/2 - 45))
    oRightGrd := FWBrowse():New()
    oRightGrd:DisableFilter()
    oRightGrd:DisableConfig()
    oRightGrd:DisableReport()
    oRightGrd:DisableSeek()
    oRightGrd:DisableSaveConfig()
    oRightGrd:SetFontBrowse(oFontBtn)
    oRightGrd:SetAlias(cAliasTab2)
    oRightGrd:SetDataQuery()
    oRightGrd:SetQuery(QryRight)
    oRightGrd:SetEditCell(.T., {|| .T.})
    oRightGrd:lHeaderClick := .F.
    oRightGrd:SetColumns(aColRight)
    oRightGrd:SetOwner(oPanGrid2)
    oRightGrd:Activate()

    //Faz o relacionamento entre os dois browses
    oRelaction:= FWBrwRelation():New()
    oRelaction:AddRelation( oLeftGrd  , oRightGrd , { { "ZC3_CODFOR" , "ZC3_CODFOR" } } )
    oRelaction:Activate()

    //Atualiza os browses e cria a janela na tela
    oLeftGrd:Refresh()
    oRightGrd:Refresh()

    ACTIVATE MsDialog oDlgGrp CENTERED

    RestArea(aArea)
Return


/*/{Protheus.doc} fMontaHead
    (long_description)
    @type  Static Function
    @author Pablo Henrique
    @since 27/05/2024
    @version 1.0
    @param pIdent, caractere, Identificador da grid a ser criada
/*/
Static Function fMontaHead( pIdent )
    Local nAtual
    Local cIdent     := pIdent
    Local aHeadAux     := {}

    if cIdent == 'L'
        //Adicionando colunas
        //[1] - Campo da Temporaria
        //[2] - Titulo
        //[3] - Tipo
        //[4] - Tamanho
        //[5] - Decimais
        //[6] - Máscara
        //[7] - Editável? .T. = sim, .F. = não
        aAdd(aHeadAux, {"ZC3_CODFOR", "CODIGO",     "C",  TamSx3("ZC3_CODFOR")[1],  0, "",              .F.})
        aAdd(aHeadAux, {"ZC3_FORNEC", "NOME",         "C",  TamSx3("ZC3_FORNEC")[1],  0, "",              .F.})
        aAdd(aHeadAux, {"ZC3_VLRPAG", "VALOR",         "N",  TamSx3("ZC3_VLRPAG")[1],  2, "@E 999,999.99", .F.})
        aAdd(aHeadAux, {"ZC3_PACREC", "%ACRÉSCIMO", "N",                         09,  2, "@E 999,999.99", .T.})

        //Percorrendo e criando as colunas
        For nAtual := 1 To Len(aHeadAux)
            oColumn := FWBrwColumn():New()

            oColumn:SetData(&("{|| " + cAliasTab1 + "->" + aHeadAux[nAtual][1] +"}"))
            oColumn:SetTitle(aHeadAux[nAtual][2])
            oColumn:SetType(aHeadAux[nAtual][3])
            oColumn:SetSize(aHeadAux[nAtual][4])
            oColumn:SetDecimal(aHeadAux[nAtual][5])
            oColumn:SetPicture(aHeadAux[nAtual][6])

            //Se for ser possível ter o duplo clique
            If aHeadAux[nAtual][7]
                oColumn:SetEdit(.T.)
                oColumn:SetReadVar(aHeadAux[nAtual][1])
                //oColumn:SetValid({|| fSuaValid()})
            EndIf

            aAdd(aColLeft, oColumn)

        Next

    elseif cIdent == 'R'
        //Adicionando colunas
        //[1] - Campo da Temporaria
        //[2] - Titulo
        //[3] - Tipo
        //[4] - Tamanho
        //[5] - Decimais
        //[6] - Máscara
        //[7] - Editável? .T. = sim, .F. = não
        aAdd(aHeadAux, {"ZC3_CODFOR",  "FORNECEDOR",         "C",  TamSx3("ZC3_CODFOR")[1],  0, "",              .T.})
        aAdd(aHeadAux, {"ZC3_PLACA" ,  "PLACA",             "C",  TamSx3("ZC3_PLACA")[1] ,  0, "",              .T.})
        aAdd(aHeadAux, {"ZC3_CODMOT",  "COD_MOTORISTA",      "C",  TamSx3("ZC3_CODMOT")[1],  0, "",              .T.})
        aAdd(aHeadAux, {"ZC3_MOTORI",  "MOTORISTA",            "C",  TamSx3("ZC3_MOTORI")[1],  0, "",                 .T.})
        aAdd(aHeadAux, {"ZC3_VLRPAG",  "VALOR",             "N",  TamSx3("ZC3_VLRPAG")[1],  2, "@E 999,999.99", .T.})
        aAdd(aHeadAux, {"ZC3_BONIFC",  "BONIFICAÇÃO",         "N",  TamSx3("ZC3_VLRPAG")[1],  2, "@E 999,999.99", .T.})

        //Percorrendo e criando as colunas
        For nAtual := 1 To Len(aHeadAux)
            oColumn := FWBrwColumn():New()

            oColumn:SetData(&("{|| " + cAliasTab2 + "->" + aHeadAux[nAtual][1] +"}"))
            oColumn:SetTitle(aHeadAux[nAtual][2])
            oColumn:SetType(aHeadAux[nAtual][3])
            oColumn:SetSize(aHeadAux[nAtual][4])
            oColumn:SetDecimal(aHeadAux[nAtual][5])
            oColumn:SetPicture(aHeadAux[nAtual][6])

            //Se for ser possível ter o duplo clique
            If aHeadAux[nAtual][7]
                oColumn:SetEdit(.T.)
                oColumn:SetReadVar(aHeadAux[nAtual][1])
                //oColumn:SetValid({|| fSuaValid()})
            EndIf

            aAdd(aColRight, oColumn)


        Next

    endif

Return

Static Function fMontDados(oSay, pIdent)
    Local aArea           := GetArea()
    Local cQuery        := ""
    Local cIdent        := pIdent

    if cIdent == 'L'

        cQuery := " " + CLRF

    elseif cIdent == 'R'

        cQuery := " " + CLRF

    endif

    RestArea(aArea)
Return cQuery

Pablo, uma query é uma leitura do banco de dados, ela não é editável, já tentou fazer via tabela temporária?

Tentei fazer por tabela temporaria porém a primeira linha das duas grid’s sempre vinham vazias, além de que não consegui fazer o relacionamento entre as duas grids utilizando tabelas temporarias, a classe FWBrwRelation ficava me retornando que não conseguiu encontrar o campo com o nome que dava a coluna.