Página 1 de 1

dbseek ñ filtra !

Enviado: 24 Out 2006 08:25
por ederxc
pessoal é o seguinte estou criando um sistema de lançamento de notas fiscais mas neste lançamento tenho que indexar meus arquivos por numero de nota fiscal e data de emissão para ñ ocorrer erro na hr de cadastrar nosta com mesmo numero ja tentei das seguintes formas .. mas ñ consigo filtrar !

if dbseek(vforn).and.(vdatemi) // primeiro tentativa
if dbseek(vforn,vdatemi) //segunda tentativa

if dbseek(vforn)
vdatemi1=datemi
if vdatemi=vdatemi1 //terceira tentativa




obs: todos as variaveis estão indexadas !
caso alguem precise de mais alguns detalhe para poder me ajudar poste aqui .. VLW

Enviado: 24 Out 2006 08:51
por MARCELOG
Prá garantir a inexistência de duplicidade de números não conheço outra maneira de fazê-lo, que não em arquivo separado (dbf, txt, etc.).
Tem um tópico beleza no site do Anderson (www.caclipperwebsite.com) a respeito de número único com auxílio de txt, explicando didaticamente os procedimentos a serem adotados.
Nesse fórum também tem muito material a respeito, utilize a busca no topo desta página (veja "número único", ou algo parecido).
A função dessek() não é utilizada para filtro e, do jeito que você a está utilizando não vai funcionar.
Se você usa índices cdx, veja a função ordscope(), talvez seja o que você está procurando.
Caso contrário, veja dbsetfilter(), também pode ajudar, mas é lento em rede.
Há outras saídas para filtro, inclusive arquivo temporário de dados e índices, array´s e tbrowse que podem resolver o seu problema.
Aqui nesse fórum, essa questão é debatida com frequência, dê uma pesquisada (digite "filtro" no buscador).
Contudo, se precisar de ajuda, tamos aí.
Detalhe mais a dúvida, tente ser objetivo, dando a dimensão do problema de forma suscinta.

MarceloG
(O conhecimento do homem pertence a humanidade - liga não, tô inspirado hoje)

Enviado: 24 Out 2006 09:59
por gvc
supondo que sua estrutura seja assim:
num_nf, C, 6
dt_emissao, D, 8

seu arquivo de indice deve ser criado assim:
index on num_nf + dtos(dt_emissao) to [arquivo de indice]
o campo número da nf deve ser caracter, senão vc terá que transformar para caracter.

e a pesquisa devera ser:

dbseek(var_num_nf + dtos(var_dat_emissao))

----------------------

supondo que sua estrutura seja assim:
num_nf, N, 6
dt_emissao, D, 8

seu arquivo de indice deve ser criado assim:
index on str(num_nf, 6) + dtos(dt_emissao) to [arquivo de indice]

e a pesquisa devera ser:

dbseek(str(var_num_nf, 6) + dtos(var_dat_emissao))

espero ter ajudado.
boa sorte.

Enviado: 24 Out 2006 10:25
por ederxc
Opa entendi ... esta tudo mais claro agora !! testarei e logo volto com o resultado e apenas uma pergunta ... Por que minhas variavel NF tem de ser caracter e ñ numerica ????

Enviado: 24 Out 2006 13:02
por gvc
Quando vc monta uma chave de indice que usa mais de um campo, vc deve transformar tudo para caracter.
Se forem dois campos numericos, a chave seria a soma dos dois número, o que não é o que queremos.
Assim, transformando seu número da NF para caracter e DTOS para transformar sua data em caracter no formato ANSI (AAAAMMDD) vc tem ordenado pelo número da NF e dentro disso, pela data.
Repare que se vc usar DTOC será devolvido uma string DD/MM/AA, o que será um erro na ordenação.

Enviado: 24 Out 2006 13:32
por ederxc
Então GVC !!! Teste concluido com exito .... e muito obrigado pela explicação !!!

Enviado: 24 Out 2006 15:54
por gvc
Conte conosco, sempre que puder-mos ajudar.

Enviado: 24 Out 2006 22:32
por rochinha
Amiguinho

Só pra completar verifique na sessão código fonte uma função para Autonumeração:

Com ela não tem como acontecer numeração repetida.

https://pctoledo.org/forum/viewtopic.php?t=1750

@braços :?)

Amigo rosinha !

Enviado: 25 Out 2006 06:29
por ederxc
Gostaria eu de estar neste nivel , ams a varios comandos que ñ entendo naquela função .. eu chego la !

mas pelo o que eu entendi o Sr. esta me dizendo para criar uma variavel que conte altomatico a cada lançamento; alem do numero de nota fiscal para fazer a difernciação das notas fiscais :{

Enviado: 25 Out 2006 13:38
por rochinha
Amiguinho

Voce não vai anterar a função e sim usa-la para obter o resultado que é simples, veja:

IDCliente := PsqControle( "CLIENTES" )

Onde:

IDCliente é um campo no seu arquivo de CLIENTES que vc armazena o codigo do mesmo e por isto vc também passa o nome da tabela para a função pois ela irá criar uma variavel chamada CLIENTES e armazenar o codigo mais recente para IDCliente.

Outro exemplo:

NUM_NF := PsqControle( "NOTAS" )

Onde:

NUM_NF é um campo com o numero de seu nota fiscal mais recente e que esta em seu arquivo NOTAS.DBF.

Voce vê que não existe segredo e sim a facilidade e com isto voce não tera problemas em implementar ao seu código e até pode retirar o vinculo com data pois não existira de forma alguma o mesmo numero de nota em várias datas ou vice versa.

:)Pos

@braços : ? )

Enviado: 25 Out 2006 13:42
por ederxc
:)Pos

Sr. rosinha

Enviado: 25 Out 2006 15:54
por ederxc
Agora entendi melhor o que o Sr. quis dizer ... Claro que nunca havera mesmo numero de nf para mesmo fornecedor .... desta forma posso usar o arquivo codigo do meu *.dbf fornecedor [/img]