Consulta por referencia

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Gilberto M Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 230
Registrado em: 13 Mar 2007 18:00
Localização: Natal-RN / Parelhas(RN) / Natal(RN)
Contato:

Consulta por referencia

Mensagem 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á
Gilberto[]
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Gilberto M Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 230
Registrado em: 13 Mar 2007 18:00
Localização: Natal-RN / Parelhas(RN) / Natal(RN)
Contato:

Mensagem 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
Gilberto[]
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Gilberto M Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 230
Registrado em: 13 Mar 2007 18:00
Localização: Natal-RN / Parelhas(RN) / Natal(RN)
Contato:

Mensagem 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??
Gilberto[]
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
Avatar do usuário
Gilberto M Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 230
Registrado em: 13 Mar 2007 18:00
Localização: Natal-RN / Parelhas(RN) / Natal(RN)
Contato:

Mensagem por Gilberto M Silva »

blz vou fazer isso.
Gilberto[]
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Mensagem 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 +,
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem 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
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Mensagem 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é.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Mensagem por filizola »

eu faria o seguinte:

index on item to arqtemp for vrefer$referencia


com o indice temporário ficaria bem mais rápido.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Responder