advpl - FWTemporaryTable com índice decrescente
Perguntas » advpl » FWTemporaryTable com índice decrescente
FWTemporaryTable com índice decrescente
Estou criando uma tabela temporária utilizando a classe FWTemporaryTable (http://tdn.totvs.com/display/framework/FWTemporaryTable) e nela há o método AddIndex para criar índices. Gostaria de saber se há alguma maneira de criar um índice decrescente.
Já tentou utilizar a função DESCEND?
http://tdn.totvs.com/pages/viewpage.action?pageId=23889338
Olá. Ainda não, porém da documento do link que você passou contém a informação "Indices decrecentes só são permitidos em arquivos DBFNTX. Indices com padão CDX não são criados em ordem descendente."
No caso da classe FWTemporaryTable ela cria a tabela temporária diretamente no banco de dados. Neste caso, creio que não irá funcionar.
— Rodrigo de Oliveira 14 de Jun de 2018
Mas você necessita mesmo da criação de um índice assim? Você poderia popular a tabela a partir de um select com order by e caso necessário acessar os dados através de queries.
— Jandir Deodato 15 de Jun de 2018
A criação do índice ajuda na performance de pesquisa e leitura.
É interessante ter está opção.
— Fábio Oliveira 22 de Jun de 2018
Caso não seja necessário exibir os dados de forma decrescente, você poderia efetuar o loop começando pelo bottom e indo até o bof, é uma prática pouco comum, porém se você deseja exibir os dados já de forma decrescente, não conheço uma forma de fazer isso além de criar a tabela temporária com o Order By assim como o Jandir já mencionou.
cTabela := FwTemporaryTable:GetRealName() cOrder := "%B1_DESC DESC%" BeginSql ... SELECT B1_DESC From %Exp:cTabela% ORDER BY %Exp:cOrder%
Use a função addindex, veja exmeplo:
oTempTable:AddIndex("01", {"UNIBOR", "SALDO"})
Rodrigo, isso criaria a ordenação na tabela de forma crescente, porém a necessidade é exatamente a contrário, a única forma de fazer o contrário é via query com ORDER BY.
— Daniel Mendes 07 de Oct de 2019
Olha, se você alimenta a tabela buscando as informações com uma query, eu recomendo usar o ORDER BY do SQL e colocar o "DESC", é o jeito mais fácil que eu conheço. Se tiver duvidas sobre SQL, eu adoro esse site: https://www.w3schools.com/sql/sql_orderby.asp
A função DESCEND não está disponível na FWTemporaryTable
Eu fiz o seguinte, criei mais um campo na tabela temporária e preenchi o campo com valor inverso (tem a função Inverte() do Advpl), nos campos numéricos, preenchi com sinal invertido.
Mesmo eu alimentado a tabela temporária com a query usando DESC ele abre a tela com a ordenação normal... Alguém tem um exemplo com ordem decrescente?
Utilizem a função OrdDescend. Documentação: https://tdn.totvs.com/display/tec/OrdDescend
Eu criei a tabela utilizando a classe FWTemporaryTable e criei o índice normalmente com o método :AddIndex().
No momento de realizar a pesquisa usei:
(cAlias)->(OrdDescend(1,,.T.))
Dessa forma consegui ordenar a tabela temporária usando o índice 1 de forma descendente.
criado 16 de Mar de 2021
Também tem esta opcao.
https://terminaldeinformacao.com/2020/07/10/como-ordenar-uma-tabela-decrescente-com-campo-data-utilizando-fwtemporarytable/