Ordem Alfabética em Formulário de campo externo

Olá pessoal,
Tenho um formulário grid ‘Estoque’. Ele possui um campo ‘id_produto’ com um select que busca o produto em outra tabela pelo id mas exibe o nome.

Se eu coloco ordenação nesse formulário, ele ordena pelo id numérico e não pelo nome. (qual a utilidade de se ordenar pelo valor escondido de um campo?).

Existe alguma solução para ordenar alfabeticamente pelo valor EXIBIDO, e não pelo valor oculto do campo ?

Obs: Usando a V6

Grespon,

Crie a sua query de forma que as duas tabelas estejam relacionadas e todos os campos a serem mostrados estejam nesta query.

Exemplo:

SELECT
a.id_tabela1,
b.nome_tabela2,
b.endereco_tabela2
FROM
tabela1 as a,
tabela2 as b
WHERE
a.id_tabela1 = b.id_tabela2
ORDER BY
b.nome_tabela2

Teste aí

Jovito,
Valeu pela dica, mas não funcionou. Fiz uma query assim no campo Select:
"
SELECT item.id_produto, prod.nm_produto
FROM table_produto as prod, table_item_pedido as item
WHERE
prod.id_produto = {id_produto}
ORDER BY prod.nm_produto
"

A ordenação dentro do campo select funciona, mas a ordenação no formulário continua puxando pelo id.

Se a app é consulta então a sua query está errada.

SELECT item.id_produto, prod.nm_produto
FROM table_produto as prod, table_item_pedido as item
WHERE
prod.id_produto = [size=12pt]{[/size]id_produto[size=12pt]}[/size]
ORDER BY prod.nm_produto

Tire as [size=12pt]{}[/size] marcadas acima e teste

Faça assim:

SELECT
item.id_produto,
nm_produto
FROM
table_produto as prod,
table_item_pedido as item
WHERE
prod.id_produto = item.id_produto
ORDER BY
prod.nm_produto

Forte abraço.

A App é um formulário Grid.

tirei as { }. Realmente tava errado. Mas mesmo assim a ordenação do formulário puxa pelo id.

Impossível…

Teste a query fora do SC, diretamente no banco e veja qual a ordenação.

Oi Jovito,
Essa query eu coloco no campo select certo?
O resultado é que o campo select ordena direitinho.

O que não funciona é a ordenação DO Formulário. Ao invés de ordenar pelo nome, ordena pelo id.

Grespon,

Essa query você tem que colocar no SQL da aplicação… se a query que você tem é mais completa, então inclua esse trecho…

No campo não irá funcionar.

Jovito,
Mas nas aplicações de formulário não tem query SQL. Só dá pra escolher os campos e adicionar WHERE e ORDER.

Ok, correto…

Vamos por parte então.

  1. Você está tentando incluir o campo id_produto, da tabela table_item_pedido correto?
  2. A Foreign Key é id_produto na tabela table_produto correto?

Se tudo estiver correto você não precisa construir manualmente a query, utilize o próprio SC, Veja

Quando você constroi o select ele já ordena automaticamente

Não há o que fazer.

Tente aí, agora.

Forte abraço.

Estava com este mesmo problema para ordenar um campo criado em formulário vi que o tópico é antigo e o problema ainda é atual, mas consegui resolver, não da melhor maneira, mas vamos lá

Temos a tabela que é lida pelo formulário vamos chamar de produto nela você tem o ID do cliente que compra este produto, e você quer ordenar o formulário de produto pelo cpf do cliente, ai você criou um campo no scriptcase que se chama cpf e nele você colocou um lookup pegando o valor do cpf pela ID do cliente da tabela produto.

O formulário lê a tabela produto, e temos essa estrutura de tabelas

tb_produto( id | id_produto | id_cliente )
tb_cliente( id | cpf )

O problema é que não temos a opção de fazer um JOIN em aplicação de formulário que resolveria nossa ordenação fazendo um JOIN com a tabela cliente e ordenando pelo CPF dele, mas podemos fazer um JOIN no ORDER BY, para que ele ordene os produtos conforme o CPF do cliente

Na aplicação de formulário temos duas caixas de texto uma para o WHERE e outra para o ORDER BY, vamos colocar no order BY o seguinte código, uso banco MYSQL, mas deve ter outras funções equivalentes se você usa outro BD.

    FIND_IN_SET(
        id_produto,
    (SELECT 
                 GROUP_CONCAT(id_produto ORDER BY tb_cliente.cpf ASC)
    FROM
             tb_produto
    LEFT JOIN tb_cliente ON tb_cliente.id = tb_produto.id_cliente
    )

A função GROUP_CONCAT irá trazer os códigos do produtos separados por vírgula ex: (1,2,3,4,5,6), o ORDER BY dentro do GROUP_CONCAT irá ordenar os produtos conforme o cpf dos clientes ex: (1,5,3,2,6,4), então o FIND_IN_SET irá retornar a posição do id_produto conforme a ordem na nossa lista.

Agora temos um problema, o scriptcase vai retirar a palavra ORDER BY que colocamos na caixa de texto no momento em que gerar o código, pois para um ORDER BY comum não é necessário escrever ORDER BY id, você escreve apenas id, pois o scriptcase já coloca o ORDER BY pra você e então ele retira a palavra ORDER BY para que você não erre, mas nesse caso precisamos da palavra ORDER BY ali e ai meus amigos que entra a tão gloriosa gambiarra que nos permite fazer o que achávamos que era impossível.

Antes de chamar o seu formulário em alguma aplicação vamos criar uma variável global assim

[order_by] = ‘ORDER BY’;

ou com sc_set_global o que preferir.

Então… Mudamos o texto na nossa caixa do ORDER BY para

  FIND_IN_SET(
        id_produto,
    (SELECT 
                 GROUP_CONCAT(id_produto [order_by] tb_cliente.cpf ASC)
    FROM
             tb_produto
    LEFT JOIN tb_cliente ON tb_cliente.id = tb_produto.id_cliente
    )

E pronto!
Agora o formulário será ordenado por um campo que criamos