Página 1 de 2

Consulta por referencia

Enviado: 01 Out 2007 17:48
por Gilberto M Silva
Olá pessoal, estou tentando fazer uma rotina de consulta por referencia de produto da seguinte maneira:

Um determinado item tem vários fabricantes para cada fabricante tem uma referencia e o cara da loja quer cadastrar o item e no campo referencia cadastra a referencia de cada fabricante um atras do outro, pois bem, como eu faço para ele fazer uma pesquisa por referencia?
Ex: o item tem as seguintes referencias;
TD1920 FS2589 JH13521 MS4512
então ele digita JH13521, como eu faço para o sistema procurar no campo REFERENCIA o q ele digitou??
Brigrado desdejá

Enviado: 01 Out 2007 17:52
por Maligno
A maneira mais rápida? Crie um índice para cada referência e pesquise índice por índice, até encontrar. Se não encontrar, não vai demorar tanto quanto seria demorado por um SET FILTER, que seria outro método.
Eu faria deste modo, até por quê, não deve ser tantas referências assim.

Enviado: 01 Out 2007 17:55
por Gilberto M Silva
não são ele falou que no máximo 5 por produto, mais as referencias estão no mesmo campo

Enviado: 01 Out 2007 17:58
por Maligno
Já está errado. Referências devem ser sempre separadas. Minha sugestão: separe-as e crie os índices como eu disse. Na pesquisa, coloque uma malha pra pesquisar cada índice. Não tem erro.
Fora isso, como eu disse: SET FILTER. Dependendo do tamanho do arquivo de dados, fica mais lento que lesma manca.

Enviado: 01 Out 2007 17:59
por Gilberto M Silva
há entendi, criaria no arquivo 5 campos para referencia e toda vez q ele pesquisase por fererencia ele checava todos os campos se ñ achasse volta, é isso??

Enviado: 01 Out 2007 18:06
por Gilberto M Silva
blz vou fazer isso.

Enviado: 01 Out 2007 18:06
por Maligno
Gilberto M Silva escreveu:há entendi, criaria no arquivo 5 campos para referencia e toda vez q ele pesquisase por fererencia ele checava todos os campos se ñ achasse volta, é isso??
Exatamente. :)

Enviado: 02 Out 2007 08:55
por ANDRIL
Uma outra opção seria vc fazer um banco separado para as referencias apenas com os campos CODIGO_PRODUTO, REFERENCIA.

Assim no cadastro do produto vc abre 5 vars p/ o cliente colocar as referencias e salva elas separadas no banco especifico.

Exemplo:

DBF referencia.dbf
============

codigo referencia
00001 TD1920
00001 FS2589
00001 JH13521
00001 MS4512
00002 XX9201
00002 ZZ5891

Assim vc tera mais um arquivo porem com apenas 1 indexado pelo campo REFERENCIA.

Quando o cliente digitar a REFERENCIA que esta a procura, vc consulta o banco de REFERENCIAS e se encontrado retorna o codigo do produto.

*********************
FUNCTION achareferencia(procura)
*obj: retorna o codigo do produto localizando atraves da referencia
*********************
**abre e cria area a ser pesquisada
select 1
use referencia exclusive
index on REFERENCIA to arquivo1

seek procura
if found()
**se encontrar retorna o codigo do produto
codigodoproduto=CODIGO_PRODUTO
return .T.
endif
**se nao encontrar retorna .F. como codigo de erro
return .F.


Exemplo de uso
==========
codigodoproduto=0 //--declare esta var antes da funcao
procura=space(6)
@10,01 say"Digite a referencia:" get procura pict"@!";
valid achareferencia(procura)=.t.
read

? codigodoproduto

**aqui entra sua rotina de busca pelo codigo do produto**


Acho que é isso ai,

Ate +,

Enviado: 02 Out 2007 09:51
por Maligno
Uma outra opção seria vc fazer um banco separado para as referencias apenas com os campos CODIGO_PRODUTO, REFERENCIA.
Sim, isso é até possível. Mas aí, pra simplesmente juntar as referências de um mesmo produto, você teria o mesmo trabalho que se tem, no outro método, para pesquisar uma referência de um mesmo produto. Trocou seis po meia dúzia. :)

Enviado: 02 Out 2007 16:05
por gvc
Com o arquivo de referência, vc cria 2 indices.
Um com o código + referência e outro com referência + código.

Assim vc procura um código e encontra todas as referências dele.
Se vc procurar uma referência, encontra todos os códigos que a utilizam.

É a técnica de explosão e implosão de produtos.
Quais produtos [A] que compõe um determinado produto e em quais produtos são utilizados determinados produtos [A].
[A] - materia prima ou produto intermediário.
- produto final ou intermediário.

Enviado: 02 Out 2007 16:28
por Maligno
Captei. :)
É mais uma possibilidade que poderia resolver o problema. Mas lembre-se de que as 5 referências residem no mesmo registro. E aí, como fica a criação das chaves?

Enviado: 02 Out 2007 16:49
por alaminojunior
A solução do Andril mais acima é a que estou usando em meu sistema.
Na tabela de produtos eu tenho código, etc....
Tenho outra tabela de sub-códigos.
Exemplo:
Eu cadastro uma caneta com um código proprio que o sistema atribui;00001,00002....e por aí vai.
Depois em outro dbf atribuo o código principal num campo e outros códigos (noutro campo) como ean, fornecedor, use a imaginação.
Claro que tudo isso atrelado a uma boa rotina de verificação, para não duplicar as coisas.
No momento da pesquisa, dou um seek no sub-código primeiro, se não encontrar nada, seek no código principal.
Espero ter ajudado

Enviado: 02 Out 2007 17:21
por ANDRIL
Trocou seis po meia dúzia
Não acho. Sempre que se pode encomizar em arquivos abertos (em caso de indice simples "sem tags") deve-se faze-lo.

Maligno na sua ideia ele tera q ter 5 campos cada um com um indice. Fazer 1 seek para cada campo ate o 5 campo "salvo se achar antes do 5o. campo".

Na minha opniao, acho que um arquivo simples indexado pela referencia e agrupado pelo codigo do produto seja mais viavel, pois bastara um seek pra saber se o produto existe.


Bom quem sabe o que é melhor neste caso, é nosso amigo que vai usar.

Até.

Enviado: 02 Out 2007 18:13
por gvc
Se cada referência é de um fabricante:
TD1920
FS2589
JH13521
MS4512

E o produto é o C003

O arquivo ficaria:
C003 - TD1920
C003 - FS2589
C003 - JH13521
C003 - MS4512

E quantas outras referência forem necessárias.
Mudando a ordem do indice, pode ser feita a pesquisa por referência e saber o código do produto.
E ainda, colocando um campo indicando se a referência do fabricante esta bloqueada, o sistema localiza, mas informa ao usuário essa pendência. Ou qualquer outra coisa que o usuário deva saber quando for pesquisar pela referência.

Vamos aguardar o Gilberto dar o seu parecer.

Enviado: 02 Out 2007 18:51
por filizola
eu faria o seguinte:

index on item to arqtemp for vrefer$referencia


com o indice temporário ficaria bem mais rápido.