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
compartilhar
  • Pablo, uma query é uma leitura do banco de dados, ela não é editável, já tentou fazer via tabela temporária?

    Daniel Mendes   2 months ago
  • 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.

    Pablo Henrique Ribeiro da Silva   2 months ago
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags fwbrwrelation ou faça a sua própria pergunta.