Autor Tópico: Cláusula where  (Lida 2245 vezes)

eritonf

  • Avançado
  • ****
  • Mensagens: 297
    • Email
Cláusula where
« Online: Outubro 19, 2012, 11:10:05 am »
Olá pessoal!

Estou diante de uma situação que tem me tirado o sossego, e preciso da ajuda de vocês.

Em uma consulta que estou trabalhando com agrupamento, precisei criar um campo manual no filtro, para fazer uma busca usando like na clausula where.

Conforme nosso colega Haroldo tinha me indicado fazer, eu recebo o campo criado no onScriptInit da consulta e de acordo com o resultado eu crio uma nova where com a macro sc_select_where(add)
Tudo está configurado e perfeitinho até que eu utilizo um campo nativo do filtro, que faz a busca também entre duas datas.

O erro ocorre pois o campo nativo do filtro cria outro where na consulta então fica assim:

Código: [Selecionar]
(...) nm_sel_esp where fin_competencia between '2012-09-01' and '2012-10-01' WHERE plc_id > 0 AND cec_id > 0 AND con_id <> 23 AND fin_excluido <> 1 (...)
Sendo que o primeiro where é criado pelo campo original do filtro e o segundo pelo campo manual do filtro.

Eu sei que eu poderia criar uma condicional para alterar o where criado pelo campo manual no onScriptInit mas o problema é que no onGroupByAll eu recupero a clausua where corrente com o {sc_where_current} para poder fazer uma outra query que realiza uns cálculos apresentados no final do agrupamento.

Aguem pode me ajudar?
Att.
Ériton Fróes

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Cláusula where
« Responder #1 Online: Outubro 19, 2012, 11:16:16 am »
Bem vindo ao clube, é isso que impede de eu criar gráficos dinâmicos e personalizados.
-- Design ou programador eis a questão.

eritonf

  • Avançado
  • ****
  • Mensagens: 297
    • Email
Re:Cláusula where
« Responder #2 Online: Outubro 19, 2012, 11:24:29 am »
Eu ainda não testei, mas pelo que estou vendo terei que criar todos os campos do filtro de forma manual e tratar isso em uma função que gera o where dinamicamente.

Mas isso começa a caminhar contra o objetivo do scriptcase que é acelerar o processo de desenvolvimento, pois toda vez que houver uma necessidade de alterar o filtro (acrescentar ou retirar campos) terei também que alterar a programação da função. sad reality.

Será que não há outra solução?
Att.
Ériton Fróes

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Cláusula where
« Responder #3 Online: Outubro 19, 2012, 11:27:56 am »
Creio que não eriton é o mesmo problema que tive quando eu criava uma view para gerar um gráfico de acordo com o que eu queria, que era um TOP 10, TOP 20, TOP 30 mas como o filtro já gera automaticamente um WHERE a aplicação fica com 2 WHERES, nestes casos o que eu fiz, eu criei uma aplicação de controle que faz a função do filtro  gerando o WHERE dinamicamente, e também usando views.  Acho que você consegue.
-- Design ou programador eis a questão.

eritonf

  • Avançado
  • ****
  • Mensagens: 297
    • Email
Re:Cláusula where
« Responder #4 Online: Outubro 19, 2012, 11:36:16 am »
Creio que não eriton é o mesmo problema que tive quando eu criava uma view para gerar um gráfico de acordo com o que eu queria, que era um TOP 10, TOP 20, TOP 30 mas como o filtro já gera automaticamente um WHERE a aplicação fica com 2 WHERES, nestes casos o que eu fiz, eu criei uma aplicação de controle que faz a função do filtro  gerando o WHERE dinamicamente, e também usando views.  Acho que você consegue.

Não vejo ainda a necessidade de usar views no meu caso, mas estou vendo que vou ter que fugir do filtro.

Espero que isso não atrapalhe futuramente a criação dos gráficos.

:(
Att.
Ériton Fróes

Haroldo

  • Expert
  • *****
  • Mensagens: 6262
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Cláusula where
« Responder #5 Online: Outubro 20, 2012, 12:21:49 pm »
Cole aqui o código de seu evento onScriptInit e seu SQL principal.