Como vocês criam suas telas de Localizar? Vamos debater?
12/01/2006
0
Estou aqui para lançar mais uma discussão, que ao meu ver ajudará muita gente, pois esse dúvida não só eu tenho...
[b:29324df17b]Como vocês criam suas telas de localizar?[/b:29324df17b]
Eu crio assim:
Tenho uma tela padrão, com um Edit e um DBGrid, o DBGrid está vinculado a um SQL em um Datamodule...
pois bem, sempre que preciso chamo a tela passando o parametro NOMETABELA, e quando o usuario digita algo no Edit, ele cria um SQL e retorna no DBGrid, eu pego os valores no DataSet no DataModule.
Funciona perfeitamente, porem tem alguns contras:
- É dificil você personalizar o que você quer trazer, pois em SQL traz tudo que está no banco...
- Traz os nomes do banco no titulo do DBGrid.
- Não vem formatado os dados no grid.
Pois bem, todos os contras eu consegui resolver, mas fica muito ´lento´ ao exibir pro usuário..
então por isso estou escrevendo isso, queria trocar um idéia de como criar uma tela de localizar padrão pro sistema inteiro, e de fácil customizacao..
[]s a todos...
Titanius
Posts
12/01/2006
Rafael Gomes
por exemplo, tenho uma label qualquer referente a algum campo, quando o usuario clica duas vezes a tela de procura aparece ... o empecilho é que para esses componentes que sao usados para as pesquisas eu coloco o nome deles com o mesmo nome do campo da tabela ...
dai na hora de montar a consulta SQL o campo que eu pego o nome do campo atraves de Sender.Name ....
dai para outros campos eu faço typecast e pronto ...
[]ss
12/01/2006
Romulocpd
Eu crio uma tela de busca para cada situação. Eu geralmente tenho um formulário padrão pra buscar que será o ´pai´ dos outros. Não vejo como criar uma tela padrão para todo o sistema.
Ex: Pesquisa de Funcionários é tranquilo pois sempre é pelo nome. Mas busca de clientes, fornecedor, transportadora vc tem CNPJ, razao social, fantasia, inscr. estadual e outros.
Ou pesquisa de Pedido de Venda. Tem filtro por data, vendedor, sendo que a data pode ser: data emissao, data faturamento, dt cancelamento, etc.
Acho que é mt caso a caso mesmo. Eu crio uma tela pra cadauma e fica show.
Pra preenchero Grid eu uso o NextGrid (nao DBware), daí faço o loop e vou preenchendo e validando como eu preciso.
Vlw!
12/01/2006
Titanius
No meu caso, eu chamo o DBGrid primeiramente, dando um where qualquer que me retorne nada, aih eu vejo os campos, o usuario clica no titulo do dbgrid referente ao campo que ele quer procurar, aih eh preencher o Edit, e monta o SQL de acordo com o campo que o usuario escolheu...
Essa forma, foi a que eu encontrei pra criar uma tela padrão de localizar... mas como eu disse tem algumas desvantagens... Criar uma tela de localizar pra cada ocasião é bem melhor, pois voce controla melhor o que o usuario quer ver, porem da um trabalhão só... imagina criar uma tela pra cada cadastro e tals..? Mas como eu disse, eh bem melhor por voce ter total controle sob o que está sendo feito...
Quanto a esse NextGrid, o que vem a ser isso? ele não é Dataware não? Se nao for, nao fica lento? Pois vc abre uma Query, da um for nela e preenche esse Grid, nao demora não?
[]s
12/01/2006
Romulocpd
O NextGrid (www.bergsoft.net) é um Grid que tem DBware tb, mas é pago (60 dolares).
Por carregar na mao nao fica lento de forma alguma. Nos exemplos que vem como o componente ele preenche 100 mil linhas em 1 segundo, é um controle mt rapido mesmo e tem tipo de coluna data, imagem, html, progres barr, etc.... está funcinando perfeitamente.
Da forma que vc está falando eu achei interessante porém este de fazer um select vazio pra pegar as colunas nao acho uma boa pois é um trafego q vc gera desnecessário.. mas é aquela velha coisa.. cada caso é um caso.. eu evito ia o banco de dados ao máximo, ao extremo!
Vlw!
12/01/2006
Adriano Santos
Eu gostei da ideia do Romulo, parece bem legal.
Onde eu trabalho a pesquisa fica no próprio form onde os dados são mostrados. Existe um botão que chama um procedimento. Este procedimento aponta para um form, uma para cada tipo de tela, cada tipo de cadastro.
Particularmente acho legal essa idéia, pq vc tem controle total sobre a pesquisa. Já trabalhei em locais onde a tela de pesquisa era genérica, mas neste caso as pesquisas eram sempre pelo mesmo tipo de campo, ou seja, não tinha muito o que se preocupar.
12/01/2006
Romulocpd
Pra ver como eu consigo flexibilidade desta forma:
O meu sistema é para lojas de comércio varejista (especificamente pra Lojas de Eletrodoméstico.. mas atende a qualquer comércio). Eu fechei com uma construtura que faz terraplanagem em munícipios da região.
O que fiz? Por exemplo, meu cadstro de produto é bem grande para uma loja, mas para a construtura ele é muito reduzido a alguns campos. Então eu criei parametros no sistema.
Tela de Pesquisa 1 ou 2. De acordo com uma tabela de parametros a busca fica diferente.
Desta forma quando estou numa loja com Pesquisa = 1 tenho as opções:
CODIGO PRODUTO
DESCRICAO
REFERENCIA
COD. BARRAS
COD. FORNECEDOR
FORNECEDOR (abre outra busca dos fornecedores)
Quando a busca é do tipo 2 ele tem as opções:
PRODUTOS
EQUIPAMENTOS
AMBOS.
Na construtora ele so tem 2 tipos de produto. Produtos comuns que são usados na obra (tijolo, pedra, areia, etc..) e ferramentas da propria empresa. Iso pra pra saber onde está a ferramenta pra evitiar furtos.
Com esta tela personalizada eu consigo num único sistema atender a todos os meus clientes. Jà tenho 7 parametros!..hehehehe.. um dia vou chegar a Microsiga que tem uns 6000 parametros!!!!
Acho que nao adianta. Quando agente tem que deixar flexibilidade e detalhar bem as interfaces se nao pegar bem no código nao fica legal. Acho buscas genéricas coisa somente para tabelas auxiliares, tipo Tipo de Cobraça, forma de pagamento, tipo de produto, etc.
Na verdade venho do VB (vivo dele na verdade, Delphi está em projeots externos até eu formar minha empresa) e nele nao temos Data Modules e outras coisas, é tudo no braço! Por isso no VB temos muita qualidade (depende do programador, claro!...).
Vlw!
12/01/2006
Adriano Santos
Você pode fazer o que quiser, terá controle total concordo plenamente.
Agora me diz uma coisa, como faz com os insumos? rsrs...já desenvolvi programas para construtoras, rsrs....sei que é a maior treta a parte de insumos.
12/01/2006
Romulocpd
To bem no inicio. To no controle de Obra, Requisições da Obra (com seus produtos/equipamentos) e gerando relatório de custo da obra, movimentacao de estoque e outros.
Na verdade o cara cara alguns milhoes no ano porem nunca teve qualquer informatizacao e ta a maior dificuldade pra poder fazer o sistema pois eles nem sabem o q querem direito.
Daí não chegamos na parte de insumos (que na verdade nem sei direito o que é!. :D )....
Quando estiver avançando eu te falo. Se quiser, e tiver tempo, eu te mando o programa e o FBCLIENT.DLL que o acesso funciona num banco remoto Firebird. Assim q to testando. Se tiver banda larga roda na boa.
12/01/2006
Adriano Santos
Ah, sua dor de cabeça ainda vai começar...rsrs...não é difícil, mas é chato.
Se precisar de um help pode chamar.
12/01/2006
Titanius
[]s
12/01/2006
Romulocpd
Lento não fica. Exemplo, eu para abrir a busca de Produtos faço:
var Frm: TFrmPesquisarProdutos; Produto: Integer; begin Frm := TFrmPesquisarProdutos.Create(Self); Produto := 0; try Frm.ShowModal; Produto := Frm.ProdutoSelecionado; finally Frm.Release; FreeAndNil(Frm); end; if Produto > 0 then CarregarDadosDoProduto(Produto) else LimparCampos; end;
Quer dizer, eu abro a busca, pesquiso o que preciso e destruo logo o bjeto. Nâo uso aquele CreateForm. No source do meu projeto eu só crio na inicialização meu formulario principal e o Data Module, do resto é tudo deste jeito e nao tenho absolutamente nenhum problema.
Caraca.. este é o fórum mais produtivo que já participei, geralmente foruns sao cheios de briguinhas ridiculas, discussoes inuteis ou OFF-TOPIC o tempo todo.
Vlw!!!!
12/01/2006
Romulocpd
Só uma coisa, quanto a usar DBware ou não eu nao uso DBWare nas minhas pesquisas pois nao posso comprar o NextDBGrid da bergsoft!... :(
12/01/2006
Jairroberto
Criei alguns formulários padronizados de cadastro que são herdados por todos os formulários de cadastro da aplicação. Nele há um PageControl com duas abas: Filtro e Cadastro. A tela sempre se abre no filtro, onde o usuário pode escolher o campo desejado na pesquisa, o operador (igual a, contém, etc., limitado de acordo com o tipo de campo selecionado) e o valor ou valores que deseja filtrar. Abaixo destas opções é apresentado o resultado em um DBGrid. Na aba Cadastro ficam os detalhes de cada registro. Como o formulário de pesquisa é o mesmo do cadastro, a formatação do campos e os títulos do DBGrid do Filtro são ajustados de acordo com o mesmo DataSet usado para inserção, edição e exclusão. Não deixa de ser um formulário de pesquisa para cada cadastro, porém os recursos de dados utilizados são os mesmos para ambos. A única preocupação é mudar Visible para False nos campos que não devem constar da pesquisa. Lembra-se da tal Orientação a Objetos?! Esse formato é ótimo, pois qualquer melhora implementada no mecanismo de pesquisa dos formulários ´pais´ são refletidas automaticamente em todos os formulários de cadastro, e o que é melhor, de todos os sistemas que desenvolvemos.
Há também a necessidade de pesquisa em campos específicos que correspondem a chaves estrangeiras em tabelas auxiliares. Neste caso, criei um diálogo padronizado para o qual passo alguns parâmetros que permitem fazer a consulta em campos pré-determinados, recebendo de volta o valor chave do registro selecionado. Neste diálogo o usuário também pode selecionar o operador e o valor a ser pesquisado e a formatação do valores retornados é realizada em função do tipo de campo retornado. O título dos campos retornados é passado juntamente com o nome deles na tabela, em um formato pré-definido pela rotina (Ex.: ´PesNome <Nome>´ ou simplesmente ´Nome´ caso o nome do campo seja mesmo ´Nome´).
Um abraço,
Jair
12/01/2006
Titanius
Agora, tenho outras discussões :D
Romulo, esta é pra vc:
Esse NextGrid (normal, não o dataware) é gratuito? pois baixei ele, e instalei e nao me fala nada de pagar... por sinal um otimo grid... gostei muito dele...
Essa é pra todos:
E os campos Lookups? como vocês fazem?
tipo, numa tabela: VENDAS
IDVENDA
IDCLIENTE
VALOR
...
Note que na tabela soh tem o IDCLIENTE, e na tela, como voces trazem ele? No meu caso, coloco um Edit pra colocar o codigo, e um outro Edit que exibe o nome do cliente, e trago este nome via FK no SQL.
Ou vocês usam o DBLookupComboBox?
[]s
12/01/2006
Adriano Santos
var Frm: TFrmPesquisarProdutos; Produto: Integer; begin Frm := TFrmPesquisarProdutos.Create(Self); Produto := 0; try Frm.ShowModal; Produto := Frm.ProdutoSelecionado; finally Frm.Release; FreeAndNil(Frm); end; if Produto > 0 then CarregarDadosDoProduto(Produto) else LimparCampos; end;
Posso te dar uma dica Romulo? A única modificação que faria no seu código é:
var Produto: Integer; begin FrmPesquisarProdutos := TFrmPesquisarProdutos.Create(Self); Produto := 0; with FrmPesquisarProdutos do begin try ShowModal; Produto := ProdutoSelecionado; finally Release; FreeAndNil(FrmPesquisarProdutos); end; end; if Produto > 0 then CarregarDadosDoProduto(Produto) else LimparCampos; end;
Eu retirei a variavel Frm, não muda nada, mas fica mais simples...eu acho.
Clique aqui para fazer login e interagir na Comunidade :)