none
Como criar um form de lookUp específico? RRS feed

  • Pergunta

  • Olá pessoal

    Antes de eu explicar sobre esse form, tenho q falar sobre a situação de aplicação disso.

    Tenho uma tabela com uma ID propria adquirida por um numero sequencial, uma chave estrangeira e um campo normal, do tipo string, q armazena numeros seriais preenchidos manualmente.

    Tenho um form filho que mostra os registros dessa tabela, mas já filtrados pela chave estrangeira, q é um registro selecionado no form pai antes do menuButton abrir este form filho.

    Esta tabela poderá ter vários numeros seriais iguais, exemplo:

    ID     ChaveEstrangeira  ...   NumSerial

    1               CE1                       s123

    1               CE1                       s123

    1               CE1                       s222

     

    Eu gostaria que meu form lookUp mostrasse os números seriais apenas para a chave estrangeira em questão, mas sem repetir um já existente, ou seja, ao invés do lookUp mostrar s123, s123, s222, ele mostraria s123, s222 apenas.

    Provavelmente terei q fazer isso por código, mas ñ tenho certeza.

    Já criei o form lookUp mas por enquanto mostro todos os seriais de todas as chaves estrangeiras.

    Alguém tem uma idéia ou já fez algo parecido com isso?

    Obrigado. T+

    sexta-feira, 23 de abril de 2010 15:05

Respostas

  • Cara, se eu entendi o que ta faltando é um group by, certo? Onde você agrupa o que é igual?
    []s Pichler
    • Marcado como Resposta ade10x100 quinta-feira, 29 de abril de 2010 19:56
    terça-feira, 27 de abril de 2010 18:46

Todas as Respostas

  • Você pode utilizar a classe SysTableLookup.

    Creio que esse post possa te ajudar: http://www.daxbr.com.br/?p=53

     

    Abrs,

    Peterson Ferreira

    www.dynamicsaxbr.com

     

    PS: Se o tópico for de bom uso, por favor marque como útil.

    sexta-feira, 23 de abril de 2010 16:49
  • Opa, valeu pela resposta.

    Já utilizei essa SysTableLookup uma vez, no momento to abrindo um form de lookUp q eu fiz. Ambos funcionam, mas o problema q estou tendo mesmo é fazer com que além de só aparecer os numeros de série para uma determinada chave estrangeira, eu mostre cada numero de série apenas uma vez.

    Testei num job e eu consegui recuperar as strings dos numeros de série e mostrá-las somente uma vez cada. Usei um while select com um if interno. Agora estou tentando jogar essas strings num grid e fazer disso meu form lookup. Alguem tem alguma sugestão?

    Pode ser isso de preencher um grid com strings para uma unica coluna ou alguma outra maneira q faça isso q estou tentando.

    Obrigado

    T+

    sexta-feira, 23 de abril de 2010 19:25
  • Bom galera, resolvi de uma forma que eu não queria fazer.

     

    Criei uma tabela com um campo string.

    No form eu inicio zerando essa tabela. Depois eu seleciono os numeros de série naquela minha tabela principal e preencho essa nova tabela, ñ repetindo os numeros de séries iguais.

    Meu form recebe um parâmetro que é a chave estrangeira que uso pra filtrar quais números de série preciso.

    Essa nova tabela é o data source do meu form lookup.

    Após usar o form lookup eu zero essa tabela auxiliar.

    Gostaria de saber se tem como criar uma tabela virtual sem ser um modelo de uma já existente. Assim essa solução ficaria menos estranha. Apesar q acho q deve ter uma maneira mais fácil de se fazer essa funcionalidade.

    T+

    segunda-feira, 26 de abril de 2010 20:21
  • Olá, o sugerido pelo Peterson já deveria ter resolvido o seu problema, consiste em fazer uma query, filtrando o que será exibido e ai mostrando no lookup.

     

    No seu caso, você pode usar as tabelas temporárias,  que tem suas estruturas definidas na AOT, mas não salvam os dados. Os dados persistem enquanto você estiver executando a operação, uma vez que ela é encerrada, a tabela é limpa automaticamente.


    []s Pichler
    • Sugerido como Resposta Ricardo Pichler terça-feira, 27 de abril de 2010 14:06
    terça-feira, 27 de abril de 2010 14:06
  • Fiz um form de teste aki só pra fazer um lookup usando query e tal, pra ver se eu ñ to comendo bola.

    Mas como eu disse, sei q funciona dessa maneira, e aqui no teste funcionou sem problemas, mas somente a parte de filtrar os dados.

    Minha tabela principal é assim:

    ID     ChaveEstrangeira  ...   NumSerial

    1               CE1                       s111

    2               CE1                       s122

    3               CE1                       s122

    4               CE2                       s221

    5               CE2                       s222

    6               CE3                       s333

    Como vcs podem ver, tenho 6 registros nessa tabela que armazenam, no meu caso, os defeitos para os itens de uma Ordem de Serviço.

    Aí tenho 3 itens, que seriam CE1, CE2 e CE3.

    Eu fazendo o lookup que filtra os dados de acordo com o item CE1 por exemplo, vai aparecer os numeros de série s111, s122 e mais uma vez s122 como opção, pois tenho 3 registros do item CE1.

    A parte de filtrar pela chave estrangeira funcionou blz, mas eu ainda quero q no lookup ñ apareçam dados repetidos, emboram existam na tabela, ou seja, no lookup deve aparecer s111 e s122 apenas uma vez cada.

    Embora eu tenha 3 registros do Item CE1 na tabela, na verdade são apenas 2 itens, um com Numero de Série s111 e o outro s122. O s122 aparece repetido pq esse item apresentou dois defeitos, que são os outros campos que eu ñ colokei no exemplo, pois ñ importa aqui.

     

    Espero que o pessoal agora tenha entendido qual era o verdadeiro problema.

    Creio tbm que me expressei mal.

     

    T+

    terça-feira, 27 de abril de 2010 17:52
  • Cara, se eu entendi o que ta faltando é um group by, certo? Onde você agrupa o que é igual?
    []s Pichler
    • Marcado como Resposta ade10x100 quinta-feira, 29 de abril de 2010 19:56
    terça-feira, 27 de abril de 2010 18:46
  • Pode ser, mas agora ñ sei como eu faria pra testar isso.

    Mas incrementando as informações. Esses números de série morrem nessa tabela de defeitos. Não há outra tabela com números de série cadastrados pra eu puxar os dados. Eu busco esses números dos próprios registros anteriores da mesma tabela.

    Eu utilizei uma tabela temporária com apenas um campo string pra ser o data source do form lookup q eu fiz, pois ñ consegui inserir dados no grid deste form sem ter um data source. Então cada vez q eu chamo o form lookup, eu passo qual item (CE1, CE2, etc) eu qro que filtre e através de código eu insiro nessa tabela temporária os numeros de série filtrados e somente uma vez cada.

    Deu certo, mas sei q tá mto estranho isso, hehe.

    O objetivo de tudo isso é mostrar para o usuário quais são os numeros de série já cadastrados anteriormente para o mesmo item da OS e que ele pode utilizar. Esse campo é obrigatório mas de livre edição, ou seja, o usuário que preenche como é o numero de série.

    Precisamos desses números para diferenciar os itens nessa tabela, não permitir ter mais itens defeituosos do que a qtde de itens cadastrados na OS e para fazer uma contagem do total de defeitos por item.

    Só falta eu fazer essa parte da contagem.

    Mas enfim, vou deixar aberto o tópico e se eu chegar numa solução melhor e decente eu compartilho.

    T+

    terça-feira, 27 de abril de 2010 19:09