Versão atual:

Ordenar tabela temporária FWMBrowse

Bom dia! Estou tentando implementar uma funcionalidade de ordenar a temporária(após o carregamento sem precisar realizar nova consulta), de acordo com o click no header da tabela. Por exemplo se o click for na coluna "Empresa" que a temporária seja ordenada por esta coluna em ordem ascendente, e descendente se for clicado novamente, e assim por diante. Ainda não tive sucesso.

#include 'totvs.ch'
#include 'parmType.ch'
#include 'fwbrowse.ch'
#include 'fwmbrowse.ch'


User Function COFIN()
    Local aColunas := {}
    Private cAlias    := GetNextAlias()  
    Private oTempTable:= FWTemporaryTable():New( cAlias ) 
    Private aCampos   := {} 
    Private aCamposBRW:= {} 
    Private aIndexBRW := {}  

    aadd( aCampos, {"E1_FILIAL"  , "C",030, 0 })
    aadd( aCampos, {"E1_NUM"     , "C",010, 0 })

    aAdd( aCamposBRW,  { "Empresa"         , "E1_FILIAL" , "C",030, 0, "@!" })
    aAdd( aCamposBRW,  { "Fatura"          , "E1_NUM"    , "C",010, 0, "@!" })


    oTemptable:SetFields( aCampos )
    oTempTable:Create()

    U_GETPFINREC()

    oBrowse:= FWMBrowse():New()
    oBrowse:SetAlias(  cAlias  )
    oBrowse:SetTemporary(.T.)
    oBrowse:SetFields( aCamposBRW )
    oBrowse:SetColumns(aColunas)
    oBrowse:DisableDetails()
    oBrowse:SetDescription("Consulta")
    oBrowse:Activate()

Return Nil

User function GETPFIN()
    Local aPerguntas   := {}
    Local dDataInicio  := sTod("")
    Local dDataFim     := sTod("")
    Private aParam     := {}
    cDataAtual         :=Dtos(DATE())
    cTime              := TIME()
    cHora              := SUBSTR(cTime, 1, 2)
    cMinutos           := SUBSTR(cTime, 4, 2)

    aadd(aPerguntas, { 1, "Dt. inicial"    , dDataInicio , "", '.T.', "", ".T.", 50, .T.})
    aadd(aPerguntas, { 1, "Dt. Final"      , dDataFim    , "", '.T.', "", ".T.", 50, .T.})

    // Tela de Parametros
    if !ParamBox( aPerguntas,"Parâmetros",aParam,{||.T.},,,,,,FunName(),.T.,.T.,.T.)
        MsgAlert("Cancelado pelo Operador!")
        Return(.f.)
    else

        dDataInicio    := DTOS(mv_par01)
        dDataFim    := DTOS(mv_par02)

        dbSelectArea(cAlias)
        dbGoTop()
        while (cAlias)->(!Eof())
            Reclock(cAlias,.f.)
            (cAlias)->( dbDelete()  )
            MsUnlock()
            Commit
            (cAlias)->( DbSkip() )
        endDo

    EndIf
    Processa({|| U_MPCONFIREC(dDataInicio,dDataFim)}, "Filtrando...")


Return
user Function MPCONFIN(dDataInicio,dDataFim)
    Local nTotal := 0
    Local nAtual :=0
    Local cQuery       :=''
    Private aParam := {}
    cDataAtual :=Dtos(DATE())
    cTime      := TIME()
    cHora      := SUBSTR(cTime, 1, 2)
    cMinutos   := SUBSTR(cTime, 4, 2)
    cHoraAtual:=cHora+cMinutos



    cQuery +=" select DISTINCT " +CRLF
    cQuery +=" E1_FILIAL, E1_NUM " +CRLF
    cQuery +=" from SE1010 SE1 " +CRLF

    cQuery +=" where SE1.D_E_L_E_T_ = '' " +CRLF
    cQuery +=" and E1_VENCREA >= '" +dDataInicio + "' and E1_VENCREA <= '" +dDataFim + "' "+CRLF



    oExec := FwExecStatement():New()
    OExec:SetQuery(cQuery)
    cAliasQRY := oExec:OpenAlias()
    dbSelectArea(cAliasQRY)

    Count To nTotal
    ProcRegua(nTotal)

    dbGoTop()
    while (cAliasQRY)->(!Eof())
        dbSelectArea(cAlias)
        Reclock(cAlias, .t.)
        (cAlias)->E1_FILIAL   := (cAliasQRY)->E1_FILIAL
        (cAlias)->E1_NUM      := cvaltochar((cAliasQRY)->E1_NUM)
        MsUnlock()
        Commit

        //Incrementa a mensagem na régua
        nAtual++
        IncProc("Analisando registro " + cValToChar(nAtual) + " de " + cValToChar(nTotal) + "...")
        dbSelectArea(cAliasQRY)
        (cAliasQRY)->(DBSKIP())
    endDo

    (cAlias)->(dbGoTop())
    cTimeFim:= TIME()
    FWAlertSuccess("Sucesso "+cValtoChar(nTotal)+" registros", "Concluído ")
Return(.T.)

Versões (2):

Ver a versão formatada

Ordenar tabela temprária

Comentário

new question