Montar um FWBrowser com uma Query

Boa tarde, preciso montar um FWMarkBrowser com uma consulta SQL, nenhuma forma que encontrei funcionou. Alguém já fez isso e deu certo? Obrigado.

Olá, Felipe. Eu fiz com o exemplo deste link https://www.blogadvpl.com/usando-a-classe-fwmarkbrowse-com-tabela-temporaria/

Boa tarde, Felipe!

Possuo um FwMarkBrowse mas que funciona com tabela temporária, acredito que com algumas modificações dê pra fazer usando query. Ou dependendo da situação, dá pra utilizar com a tabela temporária mesmo assim, pois sempre que você chamar a função estática fLoadData o conteúdo do browse será atualizado com o conteúdo da query. Segue em anexo um exemplo:


User Function FINA07MK
Private aCpoInfo    := {}
Private aCampos        := {}
Private aCpoData    := {}
Private oTable        := Nil
Private oMarkBrow    := Nil
Private cCadastro       := 'Seleção de Títulos'

    FwMsgRun(,{ || fLoadData() }, cCadastro, 'Carregando dados...')

    oMarkBrow := FwMarkBrowse():New()
    oMarkBrow:SetAlias('TRB')
    oMarkBrow:SetTemporary()
    oMarkBrow:SetColumns(aCampos)
    oMarkBrow:SetFieldMark('TMP_OK')
    oMarkBrow:SetMenuDef('FINA07MK')
    oMarkBrow:SetDescription('Títulos para Cobrança')
    oMarkBrow:SetAllMark( { || fInvert() } )
    oMarkBrow:Activate()

    If(Type('oTable') <> 'U')

        oTable:Delete()
        oTable := Nil

    Endif

Return

Static Function MenuDef
Local aRotina := {}

    Add Option aRotina Title 'Efetuar Comando'     Action 'U_FINA07EF()'         Operation 3 Access 0
    Add Option aRotina Title 'Exportar Excel'     Action 'U_FINA07EX()'         Operation 6 Access 0
    Add Option aRotina Title 'Marcar Todos'     Action 'U_FINA07MD(.T.)'     Operation 6 Access 0
    Add Option aRotina Title 'Desmarcar Todos'    Action 'U_FINA07MD(.F.)'     Operation 8 Access 0    

Return(aRotina)

Static Function fLoadData
Local nI        := 0
Local _cAlias    := GetNextAlias()

    If(Type('oTable') <> 'U')

        oTable:Delete()
        oTable := Nil

    Endif

    oTable     := FwTemporaryTable():New('TRB')

    aCampos     := {}
    aCpoInfo := {}
    aCpoData := {}

    aAdd(aCpoInfo, {'Marcar'            , '@!'                         , 1})
    aAdd(aCpoInfo, {'Filial'            , '@!'                         , 1})
    aAdd(aCpoInfo, {'Cliente'            , '@!'                        , 1})
    aAdd(aCpoInfo, {'Loja'                , '@!'                         , 1})
    aAdd(aCpoInfo, {'CNPJ'                , '@R 99.999.999.9999/99'    , 1})
    aAdd(aCpoInfo, {'Nome'                , '@!'                         , 1})
    aAdd(aCpoInfo, {'Endereco'            , '@!'                         , 1})
    aAdd(aCpoInfo, {'Bairro'            , '@!'                         , 1})
    aAdd(aCpoInfo, {'Cidade'            , '@!'                         , 1})

    aAdd(aCpoData, {'TMP_OK'    , 'C'                        , 2                            , 0})
    aAdd(aCpoData, {'TMP_FILIAL', TamSx3('E1_FILIAL')[3]    , TamSx3('E1_FILIAL')[1]    , 0})
    aAdd(aCpoData, {'TMP_CLIENT', TamSx3('E1_CLIENTE')[3]    , TamSx3('E1_CLIENTE')[1]    , 0})
    aAdd(aCpoData, {'TMP_LOJA'    , TamSx3('E1_LOJA')[3]        , TamSx3('E1_LOJA')[1]        , 0})
    aAdd(aCpoData, {'TMP_CGC'    , TamSx3('A1_CGC')[3]        , TamSx3('A1_CGC')[1]        , 0})
    aAdd(aCpoData, {'TMP_NOMCLI', TamSx3('E1_NOMCLI')[3]    , TamSx3('E1_NOMCLI')[1]    , 0})    
    aAdd(aCpoData, {'TMP_END'    , TamSx3('A1_END')[3]        , TamSx3('A1_END')[1]        , 0})
    aAdd(aCpoData, {'TMP_BAIRRO', TamSx3('A1_BAIRRO')[3]    , TamSx3('A1_BAIRRO')[1]    , 0})    
    aAdd(aCpoData, {'TMP_MUN'    , TamSx3('A1_MUN')[3]        , TamSx3('A1_MUN')[1]        , 0})

    For nI := 1 To Len(aCpoData)

        If(aCpoData[nI][1] <> 'TMP_OK' .and. aCpoData[nI][1] <> 'TMP_RECNO')

            aAdd(aCampos, FwBrwColumn():New())

            aCampos[Len(aCampos)]:SetData( &('{||' + aCpoData[nI,1] + '}') )
            aCampos[Len(aCampos)]:SetTitle(aCpoInfo[nI,1])
            aCampos[Len(aCampos)]:SetPicture(aCpoInfo[nI,2])
            aCampos[Len(aCampos)]:SetSize(aCpoData[nI,3])
            aCampos[Len(aCampos)]:SetDecimal(aCpoData[nI,4])
            aCampos[Len(aCampos)]:SetAlign(aCpoInfo[nI,3])

        EndIf

    Next nI    

    oTable:SetFields(aCpoData)

    oTable:Create()

    BeginSql Alias _cAlias

        %NoParser%
        SELECT
            SE1.E1_FILIAL,
            SE1.E1_CLIENTE,
            SE1.E1_LOJA,
            SE1.E1_NOMCLI,
            SA1.A1_CGC,
            SA1.A1_TEL,
            SA1.A1_TELEX,
            SA1.A1_FAX,
            SA1.A1_END,
            SA1.A1_BAIRRO,
            SA1.A1_MUN,
        FROM %TABLE:SE1% (NOLOCK) SE1
        INNER JOIN %TABLE:SA1% (NOLOCK) SA1 ON
            SA1.A1_FILIAL = %xFilial:SA1% AND
            SA1.A1_COD = SE1.E1_CLIENTE AND
            SA1.A1_LOJA = SE1.E1_LOJA AND
            SA1.%NOTDEL%
        WHERE
            SE1.E1_FILIAL BETWEEN %Exp:MV_PAR01% AND %Exp:MV_PAR02% AND
            ((%Exp:MV_PAR05% = 'S' AND SE1.E1_HIST = '') OR (%Exp:MV_PAR05% = 'N')) AND
             SE1.E1_SALDO > 0 AND
             SE1.E1_YFORMPG IN ('007','010') AND
             DATEDIFF(DAY,SE1.E1_VENCREA,CONVERT(DATE,GETDATE())) BETWEEN %Exp:MV_PAR03% AND %Exp:MV_PAR04% AND
            SE1.%NOTDEL%
        ORDER BY
            SE1.E1_NUM,
            SE1.E1_PARCELA

    EndSQL

    (_cAlias)->(DbGoTop())

    DbSelectArea('TRB')

    While(!(_cAlias)->(EoF()))

        RecLock('TRB', .T.)

            TRB->TMP_FILIAL    := (_cAlias)->E1_FILIAL
            TRB->TMP_CLIENT    := (_cAlias)->E1_CLIENTE
            TRB->TMP_LOJA     := (_cAlias)->E1_LOJA
            TRB->TMP_CGC     := (_cAlias)->A1_CGC
            TRB->TMP_NOMCLI    := (_cAlias)->E1_NOMCLI
            TRB->TMP_END    := (_cAlias)->A1_END
            TRB->TMP_BAIRRO := (_cAlias)->A1_BAIRRO
            TRB->TMP_MUN    := (_cAlias)->A1_MUN

        TRB->(MsUnlock())

        (_cAlias)->(DbSkip())

    EndDo

    TRB->(DbGoTop())

    (_cAlias)->(DbCloseArea())

Return