Criando Indíces
Moderador: Moderadores
-
anacatacombs
- Membro Master

- Mensagens: 472
- Registrado em: 12 Jul 2005 16:53
- Localização: Cianorte-Paraná
- Contato:
Criando Indíces
Deve ser algo na concatenação dos valores:
As vezes ao criar o indice fica 005|001|001 e você está procurando 005|1|1
Tenho vários indices dessa forma aqui no sistema e funciona redondo, vamos fazer funcionar aí também.
Poste a criação do índice composto e o seek, aí podemos verificar se há algo de errado.
As vezes ao criar o indice fica 005|001|001 e você está procurando 005|1|1
Tenho vários indices dessa forma aqui no sistema e funciona redondo, vamos fazer funcionar aí também.
Poste a criação do índice composto e o seek, aí podemos verificar se há algo de errado.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Criando Indíces
Se a sua necessidade é listar todas as notas dentro de um período por:
- Fornecedor
- Fabricante
Outra vez você não forneceu a estrutura do banco de dados (fica mais dificil assim). Considerando que você não tem os índices, isto é, você os cria na hora da impressão, então você precisa criar dois índices com chaves:
Strzero(FORNCEDOR,5,0)+Dtos(Dat_Compra)
Strzero(LABOL,5,0)+Dtos(Dat_Compra)
Se ainda precisar ordenar a esses índices pelo número da NF, pode-se adicionar NF ao final. Mas acho que não será necessário.
Acredito que você tem uma rotina a qual soma as notas, mas irei exemplificar com as duas chaves: FORNECEDOR e DAT_COMPRA ou LABOL e DAT_COMPRA.
- Fornecedor
- Fabricante
Outra vez você não forneceu a estrutura do banco de dados (fica mais dificil assim). Considerando que você não tem os índices, isto é, você os cria na hora da impressão, então você precisa criar dois índices com chaves:
Strzero(FORNCEDOR,5,0)+Dtos(Dat_Compra)
Strzero(LABOL,5,0)+Dtos(Dat_Compra)
Se ainda precisar ordenar a esses índices pelo número da NF, pode-se adicionar NF ao final. Mas acho que não será necessário.
Corrija-me se estiver errado. Você quer uma hora por FABRICANTE e outra hora por FORNCEDOR, certo ?Raquel escreveu:Sim, NF+FORNECEDOR+FABRICANTE e NF+FABRICANTE+FORNECEDORanacatacombs escreveu:Tentou fazer um indice de NF+FORNECEDOR+FABRICANTE?
Acredito que você tem uma rotina a qual soma as notas, mas irei exemplificar com as duas chaves: FORNECEDOR e DAT_COMPRA ou LABOL e DAT_COMPRA.
Código: Selecionar todos
SET DATE TO BRITISH
SET CENTURY ON
cls
USE CADNF NEW EXCLUSIVE
pFORN := 0
pLABOL := 0
pNF := 543
@ 04,04 SAY "NF:" GET pNF Valid pNF>0
READ
IF !LASTKEY()=27
INDEX ON NF TO CADNF3
Seek Strzero(pNF,6,0)
IF FOUND()
Imp_NF()
ENDIF
Endif
CLS
dIni:=CTOD("")
dFim:=CTOD("")
@ 05,04 SAY "FABRICANTE:" GET pLABOL
@ 06,04 SAY "PERIODO:" GET dIni Valid !Empty(dIni)
@ 06,24 SAY "ATE:" GET dFim Valid !Empty(dIni) .AND. dFim>dIni
READ
IF !LASTKEY()=27
INDEX ON Strzero(labol,5,0)+DtoS(Dat_compra) TO CADNF4
Seek Strzero(pLABOL,5,0)
IF FOUND()
Imp_FAB()
ENDIF
ENDIF
CLS
dIni:=CTOD("")
dFim:=CTOD("")
@ 06,04 SAY "FORNECEDOR:" GET pFORN
@ 07,04 SAY "PERIODO:" GET dIni Valid !Empty(dIni)
@ 07,24 SAY "ATE:" GET dFim Valid !Empty(dIni) .AND. dFim>dIni
READ
IF !LASTKEY()=27
INDEX ON Strzero(fornecedor,5,0)+DtoS(Dat_compra) TO CADNF5
Seek Strzero(pFORN,5,0)
IF FOUND()
Imp_FORN()
ENDIF
ENDIF
Function Imp_NF()
SET ALTERNATE TO POR_NF.TXT
SET ALTERNATE ON
DO WHILE STRZERO(pNF,6,0) = NF
? NF+" Fornecedor "+Strzero(FORNECEDOR,5,0)+" Fabricante "+Strzero(LABOL,5,0)+" Data "+DtoC(DAT_COMPRA)
SKIP
ENDDO
SET ALTERNATE OFF
SET ALTERNATE TO
RETURN NIL
FUNCTION IMP_FAB()
SET ALTERNATE TO POR_FABR.TXT
SET ALTERNATE ON
DO WHILE LABOL = pLABOL
If DAT_COMPRA >= dIni .AND. DAT_COMPRA <= dFim
? NF+" Fornecedor "+Strzero(FORNECEDOR,5,0)+" Fabricante "+Strzero(LABOL,5,0)+" Data "+DtoC(DAT_COMPRA)
Endif
SKIP
ENDDO
SET ALTERNATE OFF
SET ALTERNATE TO
RETURN NIL
FUNCTION IMP_FORN()
SET ALTERNATE TO POR_FORN.TXT
SET ALTERNATE ON
DO WHILE FORNECEDOR = pFORN
If DAT_COMPRA >= dIni .AND. DAT_COMPRA <= dFim
? NF+" Fornecedor "+Strzero(FORNECEDOR,5,0)+" Fabricante "+Strzero(LABOL,5,0)+" Data "+DtoC(DAT_COMPRA)
Endif
SKIP
ENDDO
SET ALTERNATE OFF
SET ALTERNATE TO
RETURN NILUm clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
anacatacombs
- Membro Master

- Mensagens: 472
- Registrado em: 12 Jul 2005 16:53
- Localização: Cianorte-Paraná
- Contato:
Criando Indíces
Tem razão Pablo.. sem a estrutura do banco fica complicado.
Mas pelo que notei, uma nota pode ter vários fabricantes e vários fornecedores, por isso imaginei que o índice deveria ser composto por Nota+Fornecedor+Fabricante ... Vamos esperar a Raquel postar o a estrutura.
Mas pelo que notei, uma nota pode ter vários fabricantes e vários fornecedores, por isso imaginei que o índice deveria ser composto por Nota+Fornecedor+Fabricante ... Vamos esperar a Raquel postar o a estrutura.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Criando Indíces
Ao indexar por fornecedores e por fabricantes a NF fica condicionada a ser listada de acordo ao período que é solicitado. Acho que assim, vai servir.pelo que notei, uma nota pode ter vários fabricantes e vários fornecedores, por isso imaginei que o índice deveria ser composto por Nota+Fornecedor+Fabricante ...
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
raquelreis
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 18 Jul 2011 15:29
- Localização: à procura
Criando Indíces
Muito obrigada a todos pela ajuda, me desculpe pela demora. Mas ainda não me acostumei com essa de 2 páginas. Clicava no post, mas só via a última mensagem da primeira página (hehe).
Pessoal é o seguinte:
O relatório deve exibir as notas fiscais por FORNECEDOR dentro de um período(já funciona - não precisamos nos preocupar com data no momento).
O que ocorre é que por considência, foi cadastrado no meu banco duas notas fiscais com o mesmo número (NF), porém são de FABRICANTES diferentes. No meu relatório atual ele soma as duas notas (o que é errado), uma vez que são notas diferentes.
Ex:
NF.........fabricante..........valor...............fornecedor
000543.......17................200,00...............25
000543.......125...............70,00................25
É isso que preciso exibir no relatório.
O relatório atual faz isso:
NF.........fabricante..........valor...............fornecedor
000543.......17................270,00...............25 (veja que ele soma as duas notas)
Respondendo às perguntas....
* NF+STR(FORNECEDOR,5)
*SUBSTR(DATA,7,4)+SUBSTR(DATA,4,2)+SUBSTR(DATA,1,2)+NF
*SUBSTR(DTNOTA,7,4)+SUBSTR(DTNOTA,4,2)+SUBSTR(DTNOTA,1,2)+NF
--------------------------------------------------------------------
Field Name .......... Type .......... Width ............ Dec
--------------------------------------------------------------------
NF......................Character.......13................. -
FORNECEDOR.........Numeric.........5.................. 0
DATA...................Character.......10................. -
DTNOTA...............Character.......10................. -
TOTVALOR............Numeric........10.................. 0
FABRICANTE..........Numeric.........5.................. 0
Lembrando, o usuário apenas informa o período e o fornecedor.
Pessoal é o seguinte:
O relatório deve exibir as notas fiscais por FORNECEDOR dentro de um período(já funciona - não precisamos nos preocupar com data no momento).
O que ocorre é que por considência, foi cadastrado no meu banco duas notas fiscais com o mesmo número (NF), porém são de FABRICANTES diferentes. No meu relatório atual ele soma as duas notas (o que é errado), uma vez que são notas diferentes.
Ex:
NF.........fabricante..........valor...............fornecedor
000543.......17................200,00...............25
000543.......125...............70,00................25
É isso que preciso exibir no relatório.
O relatório atual faz isso:
NF.........fabricante..........valor...............fornecedor
000543.......17................270,00...............25 (veja que ele soma as duas notas)
Respondendo às perguntas....
INDEX ON NF+STR(LABOL,5) TO CADNF3 (criei no dbu tbm) --- DBSEEK(pNF+STR(pLABOL,5),.T.) esse índice é que eu crio. Mas tenho um tenho um arquivo de indice que tem os seguintes índices prontos (não foram criados por mim):anacatacombs escreveu:Poste a criação do índice composto e o seek, aí podemos verificar se há algo de errado.
* NF+STR(FORNECEDOR,5)
*SUBSTR(DATA,7,4)+SUBSTR(DATA,4,2)+SUBSTR(DATA,1,2)+NF
*SUBSTR(DTNOTA,7,4)+SUBSTR(DTNOTA,4,2)+SUBSTR(DTNOTA,1,2)+NF
Exatamente ana, foi o que eu pensei. Como uma nota pode ter vários fabricantes, fornecedor diferente, pensei em indice composto, que ai iria diferenciar minha nota, quando o número (NF) forem iguais.anacatacombs escreveu:Mas pelo que notei, uma nota pode ter vários fabricantes e vários fornecedores, por isso imaginei que o índice deveria ser composto por Nota+Fornecedor+Fabricante ... Vamos esperar a Raquel postar o a estrutura.
Pablo, me desculpe, não postei a estrutura pois não sei q estrutura está pedindo, pois em outros post já havia descrito o banco. Mais vale mais uma tentativa:Pablo César escreveu:Outra vez você não forneceu a estrutura do banco de dados (fica mais dificil assim)
--------------------------------------------------------------------
Field Name .......... Type .......... Width ............ Dec
--------------------------------------------------------------------
NF......................Character.......13................. -
FORNECEDOR.........Numeric.........5.................. 0
DATA...................Character.......10................. -
DTNOTA...............Character.......10................. -
TOTVALOR............Numeric........10.................. 0
FABRICANTE..........Numeric.........5.................. 0
Sim, assim é o que preciso Pablo. Mas quando faço o índice assim, ele não acha nota nenhuma.Pablo César escreveu:Ao indexar por fornecedores e por fabricantes a NF fica condicionada a ser listada de acordo ao período que é solicitado. Acho que assim, vai servir.
Lembrando, o usuário apenas informa o período e o fornecedor.
Keel
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Criando Indíces
KKKKKKme desculpe pela demora. Mas ainda não me acostumei com essa de 2 páginas. Clicava no post, mas só via a última mensagem da primeira página (hehe)
Então Raquel, com certeza você não tentou com o meu ultimo exemplo ! Claro que precisará adaptar, pois eu não tinha a estrutura do bd e agora que eu vejo, você tem duas datas, aliás que deviam ser do tipo DATA e que estão como do tipo caracter. Bom mas isso não vai ser problema apesar de que não é uma prática muito comum, mas enfim o que eu preciso saber quais das duas é pra utilizar no que refere-se ao período do relatório: DATA ou DTNOTA ?Sim, assim é o que preciso Pablo. Mas quando faço o índice assim, ele não acha nota nenhuma.
Bom vou adaptar pra você e você testa aí. Eu imagino que deve ser DTNOTA.
Código: Selecionar todos
SET DATE TO BRITISH
SET CENTURY ON
cls
USE CADNF NEW EXCLUSIVE
pFORN := 0
pLABOL := 0
pNF := 543
@ 04,04 SAY "NF:" GET pNF Valid pNF>0
READ
IF !LASTKEY()=27
INDEX ON NF+STR(LABOL,5) TO CADNF3
Seek Strzero(pNF,6,0)
IF FOUND()
Imp_NF()
RUN NOTEPAD POR_NF.TXT
ENDIF
Endif
CLS
dIni:=CTOD("")
dFim:=CTOD("")
@ 05,04 SAY "FABRICANTE:" GET pLABOL
@ 06,04 SAY "PERIODO:" GET dIni Valid !Empty(dIni)
@ 06,24 SAY "AT:" GET dFim Valid !Empty(dIni) .AND. dFim>dIni
READ
IF !LASTKEY()=27
INDEX ON Strzero(labol,5,0)+SUBSTR(DTNOTA,7,4)+SUBSTR(DTNOTA,4,2)+SUBSTR(DTNOTA,1,2) TO CADNF4
Seek Strzero(pLABOL,5,0)
IF FOUND()
Imp_FAB()
RUN NOTEPAD POR_FABR.TXT
ENDIF
ENDIF
CLS
dIni:=CTOD("")
dFim:=CTOD("")
@ 06,04 SAY "FORNECEDOR:" GET pFORN
@ 07,04 SAY "PERIODO:" GET dIni Valid !Empty(dIni)
@ 07,24 SAY "AT:" GET dFim Valid !Empty(dIni) .AND. dFim>dIni
READ
IF !LASTKEY()=27
INDEX ON Strzero(fornecedor,5,0)+SUBSTR(DTNOTA,7,4)+SUBSTR(DTNOTA,4,2)+SUBSTR(DTNOTA,1,2) TO CADNF5
Seek Strzero(pFORN,5,0)
IF FOUND()
Imp_FORN()
RUN NOTEPAD POR_FORN.TXT
ENDIF
ENDIF
Function Imp_NF()
SET ALTERNATE TO POR_NF.TXT
SET ALTERNATE ON
DO WHILE STRZERO(pNF,6,0) = NF
? NF+" Fornecedor "+Strzero(FORNECEDOR,5,0)+" Fabricante "+Strzero(LABOL,5,0)+" Data "+DTNOTA
SKIP
ENDDO
SET ALTERNATE OFF
SET ALTERNATE TO
RETURN NIL
FUNCTION IMP_FAB()
SET ALTERNATE TO POR_FABR.TXT
SET ALTERNATE ON
DO WHILE LABOL = pLABOL
If CTOD(DTNOTA) >= dIni .AND. CTOD(DTNOTA) <= dFim
? NF+" Fornecedor "+Strzero(FORNECEDOR,5,0)+" Fabricante "+Strzero(LABOL,5,0)+" Data "+DTNOTA
Endif
SKIP
ENDDO
SET ALTERNATE OFF
SET ALTERNATE TO
RETURN NIL
FUNCTION IMP_FORN()
SET ALTERNATE TO POR_FORN.TXT
SET ALTERNATE ON
DO WHILE FORNECEDOR = pFORN
If CTOD(DTNOTA) >= dIni .AND. CTOD(DTNOTA) <= dFim
? NF+" Fornecedor "+Strzero(FORNECEDOR,5,0)+" Fabricante "+Strzero(LABOL,5,0)+" Data "+DTNOTA
Endif
SKIP
ENDDO
SET ALTERNATE OFF
SET ALTERNATE TO
RETURN NILOutra coisa, eu tinha perguntado e pedido confirmação e você ainda não respondeu:
Aguardo ainda a sua confirmação sobre este detalhe do conteúdo no seu BD no campo NF, ok ?Pablo César escreveu:Mas deixa te perguntar, pelo visto o NF é só números ou pode conter algum caracter alfa ? Pois eu mudei a vriável PNF de caracter para numérica, isso facilita para o usuário e é mais seguro (menos perda de tempo ao errar na digitação). E mantive o seu índice. O que tem que verificar, se o NF é armazenado SEMPRE números prenchidos de zeros.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
anacatacombs
- Membro Master

- Mensagens: 472
- Registrado em: 12 Jul 2005 16:53
- Localização: Cianorte-Paraná
- Contato:
Criando Indíces
Raquel minha querida, vc tem alguma rotina dentro do relatorio para "agrupar" essas informações?
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Criando Indíces
Eu acredito Ana que agora com essa nova indexação que indiquei neste ultimo código/exemplo, o sistema não irá somar as NF, pois antes estava indexado por NF e agora é por fornecedor+"data". Não acredito que tenha uma rotina com índice proprio de procura NF ou um SUM ALL... enfim, mas na dúvida, seria bom dar uma olhada.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
raquelreis
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 18 Jul 2011 15:29
- Localização: à procura
Criando Indíces
Bom dia, pessoal
Como eu não entendo muito bem de indice, fui testando.
Quando mudo a ordem funciona. e buscando assim:
Funcionou!
Me listou as notas NF + o Labol.
Vou usar o indice no código fonte principal.
Pablo, mesmo sendo novata, concordo que os tipos são importantes (programo java que é uma linguagem Tipada).
Porém, não posso alterar o banco, é um sistema muito grande e não tenho conhecimento em clipper para mudar tudo.
Então, resolvi migrar todo os sistema. O banco estou refazendo em Mysql, e o sistema em delphi (acho mais rápido).
Mas aparece um ou outro problema no dia-a-dia né...
Como eu não entendo muito bem de indice, fui testando.
Quando mudo a ordem funciona.
Código: Selecionar todos
STR(FORNECEDOR,5)+NF+STR(LABOL,5)Código: Selecionar todos
DBSEEK(STR(pFORN,5),.T.)Me listou as notas NF + o Labol.
Vou usar o indice no código fonte principal.
Pablo, mesmo sendo novata, concordo que os tipos são importantes (programo java que é uma linguagem Tipada).
Porém, não posso alterar o banco, é um sistema muito grande e não tenho conhecimento em clipper para mudar tudo.
Então, resolvi migrar todo os sistema. O banco estou refazendo em Mysql, e o sistema em delphi (acho mais rápido).
Mas aparece um ou outro problema no dia-a-dia né...
Keel
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Criando Indíces
Raquel, testou o código que fiz pra testes ? O conteúdo do campo NF são sempre numeros prenchidos de zeros ? Contém algum carcter alfa ?
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
raquelreis
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 18 Jul 2011 15:29
- Localização: à procura
Criando Indíces
Sim, pablo
Mudei algumas coisas no seu teste e rodei. Muito legal, adorei o fato de além de um relatório em vídeo ele tá fazendo em um txt, vou tentar implementar em outros relatórios...
Sim NF são sempre números preenchidos com zeros.Porém no em registros mais antigos, tem alfa.
Mudei algumas coisas no seu teste e rodei. Muito legal, adorei o fato de além de um relatório em vídeo ele tá fazendo em um txt, vou tentar implementar em outros relatórios...
Sim NF são sempre números preenchidos com zeros.Porém no em registros mais antigos, tem alfa.
Keel
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Criando Indíces
Ahhh então tá... só que toma cuidado então ao utilizar STR() ou STRZERO(), pois esses caracteres alfa, não irão ser considerados...Sim são sempre números preenchidos com zeros.
Porém no banco em dados mais antigos, tem alfa.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
raquelreis
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 18 Jul 2011 15:29
- Localização: à procura
Criando Indíces
Como tem esse "probleminha" de tipo no banco, estou usando o STR(). Que pelo visto que é padrão.Pablo César escreveu:Ahhh então tá... só que toma cuidado então ao utilizar STR() ou STRZERO(), pois esses caracteres alfa, não irão ser considerados...
Então, nos teste o relatório está OK. Mas no fonte principal ainda não consegui. Qualquer coisa falo com vcs, vou testar mais...
Keel
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Criando Indíces
Então Raquel, se você tem essa situação, que no seu BD no campo NF ainda pode ser que tenha caracter alpha, então você não deveria colocar a variável pNF do tipo numérica, como fizemos e sim mudar para o tipo caracter. Você pode combinar a seguinte situação:
- No momento da inclusão, se a pNF tiver caracter alpha, daí você faz o REPLACE com o conteúdo igualzinho da pNF. Ex.: REPLACE NF WITH pNF
- Mas se no momento da inclusão, a pNF não tiver caracter alpha, aí sim você pode utilizar transformar para numérico e depois caracter prenchido de zeros. O STRZERO() irá transformar de numérica para caracter prenchido de zeros. Já o STR, prenche com espaços. Mas na hora de procurar no BD por exemplo a NF Nº 1 se não fizer com zeros, poderá estar __1___ , _1 , _______1 (considere "_" como espaço) e ainda irá satisfazer a condição. Do contrário utilizando STRZERO() a NF nº 1 será 000001.
Mas terá que varrer o BD inteiro, substituindo os espaços para zero em todas as NF que forem numéricas e as que tem alpha, vai ter que deixar como estão. O quê você acha ? Assim você deixaria mais padronizado o campo NF.
Olha fiz um exemplo para detectar quando a NF for somente numéros e quando não:Anexei o executável para que você faça um teste ai, não se preocupe que não vai mexer em nada com o seu BD.
- No momento da inclusão, se a pNF tiver caracter alpha, daí você faz o REPLACE com o conteúdo igualzinho da pNF. Ex.: REPLACE NF WITH pNF
- Mas se no momento da inclusão, a pNF não tiver caracter alpha, aí sim você pode utilizar transformar para numérico e depois caracter prenchido de zeros. O STRZERO() irá transformar de numérica para caracter prenchido de zeros. Já o STR, prenche com espaços. Mas na hora de procurar no BD por exemplo a NF Nº 1 se não fizer com zeros, poderá estar __1___ , _1 , _______1 (considere "_" como espaço) e ainda irá satisfazer a condição. Do contrário utilizando STRZERO() a NF nº 1 será 000001.
Mas terá que varrer o BD inteiro, substituindo os espaços para zero em todas as NF que forem numéricas e as que tem alpha, vai ter que deixar como estão. O quê você acha ? Assim você deixaria mais padronizado o campo NF.
Olha fiz um exemplo para detectar quando a NF for somente numéros e quando não:
Código: Selecionar todos
cls
Do While .t.
xNF:=Space(10)
@ 12,00 Say "NF" Get xNF Valid Eh_Num(CharRem(" 0123456789",xNF))
Read
If Lastkey()=27
Exit
Endif
@ 24,00 Say PadC("Inclusao bem sucedida !",80) Color "N/W"
Inkey(0.4)
@ 24,00
Enddo
Function Eh_Num(xNF)
If Len(xNF)>0
Alert("Contem caracter ALPHA")
Endif
Return .t.- Anexos
-
TESTE66.rar- (85.24 KiB) Baixado 82 vezes
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
raquelreis
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 18 Jul 2011 15:29
- Localização: à procura
Criando Indíces
Claro Pablo, minha NF está como caracter. Foi uma das alteração que realizei no seu código.
Ao Salvar a NF ele já completa com Zeros.
Ahh, sempre utilizo uma área de testes...
Ao Salvar a NF ele já completa com Zeros.
Ahh, sempre utilizo uma área de testes...
- Anexos
-
RelatorioReal.prg- Esse é o tal relatório. No programa de teste consigo usar bem o Indice... Mas no relatório eu não consigo. aff
- (9.08 KiB) Baixado 75 vezes
Keel
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
[]'s
_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.