Problema Urgente
Moderador: Moderadores
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
Problema Urgente
Amigos tenho um prog Comercial em diversos cliente, so que em um especial tem um problema quando tiro o relatorio de fechamento do caixa, ou seja, vendas do determinado caixa, ele começa a ler os registros em um do while XXX->MOVIMENTO == cMovimento, ai sem explicacao ele sai do do while como c tivesse satisfeita a condição imposta, mas ainda teria pela frente +- uns 2 a 10 resgistro ainda para ler , tipo teria 100 vendas que satisfaça o movimento do caixa no do while so le uns 90 a 95 resgistro dia sim ou semana sim ou nao, tem dia que le tudas os registro outro dia nao le, ja executei passo a passo o prog. e é isso que acontece, ja troquei o arquivo por outro..
Alguem já passou por isso sabe oq é
muito obrigado
Alguem já passou por isso sabe oq é
muito obrigado
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
O problema esta no código:
Mesmo que voce tenha selecionada a area correta, colocado a critica no ponto certo algo pode dar errado, exemplo:
Provavelmente voce esta fazendo uma critica do tipo:
Pode tornar rápido mas se um registro apenas estiver dentro da faixa de dados mas fora da critica a saida será prematura.
Dicas:
1 - Leia a'te o final do arquivo e critique dentro do laço
2 - Use indices pelo campo que voce usa como critica:
3 - Se estiver usando campos com datas use o ESCOPO para filtragem:
4 - Se quizer filtrar dentro de um espaço de tempo use ESCOPO para filtragem assim:
Desta forma não tem como dar erro, mas verifique o seu codigo e para ter certeza que os dados a serem mostrados estão dentro do requisito para impressão coloque o comando BROWSE() logo após o filtro antes do DO...WHILE para ver o conteudo do que sera apresentado ou a cada registro impresso apresente o conteudo do campo que voce esta criticando. Reveja indices e areas.
O problema esta no código:
Mesmo que voce tenha selecionada a area correta, colocado a critica no ponto certo algo pode dar errado, exemplo:
Provavelmente voce esta fazendo uma critica do tipo:
Código: Selecionar todos
do while <Critica>
...
enddo
Dicas:
1 - Leia a'te o final do arquivo e critique dentro do laço
Código: Selecionar todos
do while .not. eof()
if <Critica>
...
endif
enddo
Código: Selecionar todos
NumeroDaOrdemParaCritica := 3
set order to NumeroDaOrdemParaCritica
do while <Critica>
...
enddo
Código: Selecionar todos
NumeroDaOrdemPorData := 2
set order to NumeroDaOrdemPorData
OrdScope( 0, dtoc( CampoData ) )
OrdScope( 1, dtoc( CampoData ) )
do while .not. eof()
...
enddo
Código: Selecionar todos
...
@ ..GET ... DesdeAData
@ ..GET ... AteAData
NumeroDaOrdemPorData := 2
set order to NumeroDaOrdemPorData
OrdScope( 0, dtoc( DesdeAData ) )
OrdScope( 1, dtoc( AteAData ) )
do while .not. eof()
...
enddo
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Então faça um SET FILTER com sua critica e de um BROWSE() para ver o resultado obtido e ai voce encontrara a falha.
Então faça um SET FILTER com sua critica e de um BROWSE() para ver o resultado obtido e ai voce encontrara a falha.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Pode ser.
Voce poderia criar um indice temporario no momento da feitura do relatorio se for o caso.
Poderia também faz uso do código de seleção de registros que coloquei na sessão código fonte, com ela voce cria uma tabela on-the-fly com os campos que necessita na ordem que quizer e trabalha sobre o conteúdo.
Pode ser.
Voce poderia criar um indice temporario no momento da feitura do relatorio se for o caso.
Poderia também faz uso do código de seleção de registros que coloquei na sessão código fonte, com ela voce cria uma tabela on-the-fly com os campos que necessita na ordem que quizer e trabalha sobre o conteúdo.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
diogenes_varela
- Usuário Nível 3

- Mensagens: 206
- Registrado em: 04 Nov 2006 19:33
- Localização: Brasília - DF
Tente um
SET FILTER TO
e em seguida
SET FILTER <argumentos>
Pode estar ocorrendo a falha intermitente porque às vezes filtra de um modo e às vezes de outro. Não vejo outra explicação.
SET FILTER TO
e em seguida
SET FILTER <argumentos>
Pode estar ocorrendo a falha intermitente porque às vezes filtra de um modo e às vezes de outro. Não vejo outra explicação.
Os computadores não sabem o que fazem. Nós, na maioria das vezes, também não...
E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
-
diogenes_varela
- Usuário Nível 3

- Mensagens: 206
- Registrado em: 04 Nov 2006 19:33
- Localização: Brasília - DF
Forneça mais detalhes. Antes disso, verifique:
1. Se não está usando variáveis com nomes iguais aos "nomes de campo" do .DBF, pois estes têm prioridade;
2. Se estiver indexando datas, use a função DTOS. Já tive problema semelhante.
Se não resolver, mais detalhes.
1. Se não está usando variáveis com nomes iguais aos "nomes de campo" do .DBF, pois estes têm prioridade;
2. Se estiver indexando datas, use a função DTOS. Já tive problema semelhante.
Se não resolver, mais detalhes.
Os computadores não sabem o que fazem. Nós, na maioria das vezes, também não...
E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
Amigos o prog. esta correto com tds os possiveis erros que vcis disserao checados, sei que somente em um determinado cliente meu que esta dando este erro, erro que nao é toda hora quando fecha o caixa, mas sim hora ou outra. Nos demais clientes que possuo este erro nao da. o Rel. sai totalmente certo.. blz ...
isso ta com cara de while perdendo o ponto...
imagine a seguinte situação:
isso vai baguncar o relatorio, pois o laço principal esta no arquivo de caixa, porem, no meio do codigo, vc seleciona um outro banco de dados e faz o <skip>, porem no arquivo errado. isso bagunça tudo....
corrigindo o exemplo acima, ficaria:
voce tambem disse que isso acontece apenas em um cliente. o seu relatorio pode ter algum parametro que apenas aquele cliente esta utilizando, por isso apenas nele que aparece esse erro....
tente isso tambem...obrigado e ate a proxima
imagine a seguinte situação:
Código: Selecionar todos
Select Caixa
Set Order to 1
seek DTOS(dCxaIni)
do while Caixa->cx_data <= dCxaFim .and. !eof()
<codigo>
.
.
.
Select Cliente
Set Order to 1
seek Caixa->cx_clie
.
.
.
skip
enddo
corrigindo o exemplo acima, ficaria:
Código: Selecionar todos
Select Caixa
Set Order to 1
seek DTOS(dCxaIni)
do while Caixa->cx_data <= dCxaFim .and. !eof()
<codigo>
.
.
.
Select Cliente
Set Order to 1
seek Caixa->cx_clie
.
.
.
Select Caixa
skip
enddo
tente isso tambem...obrigado e ate a proxima
-
diogenes_varela
- Usuário Nível 3

- Mensagens: 206
- Registrado em: 04 Nov 2006 19:33
- Localização: Brasília - DF
Posta o trecho onde o erro acontece, é o único jeito.juniorcamilo escreveu:Amigos o prog. esta correto com tds os possiveis erros que vcis disserao checados, sei que somente em um determinado cliente meu que esta dando este erro, erro que nao é toda hora quando fecha o caixa, mas sim hora ou outra. Nos demais clientes que possuo este erro nao da. o Rel. sai totalmente certo.. blz ...
Os computadores não sabem o que fazem. Nós, na maioria das vezes, também não...
E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
-
diogenes_varela
- Usuário Nível 3

- Mensagens: 206
- Registrado em: 04 Nov 2006 19:33
- Localização: Brasília - DF
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
Eu estou usando alias..
ENT->(Dbsetorder(01))
NOT->(Dbsetorder(05))
NOT->(dBSeek(cControle,.t.))
do while NOT->NROCAX == cControle .and. NOT->(!eof())
........
........
ENT->(dBSeek(NOT->NRONOTA,.t.))
do while NOT->NRONOTA == ENT->NRONOTA .and. ENT->(!Eof()
...........
..........
ENT->(dBSkip())
enddo
.............
NOT->(dBSkip())
enddo
usando indice NTX será que seria hora de mudar de Indice????
qual o melhor? e de que maneira mais facil mudaria???
ENT->(Dbsetorder(01))
NOT->(Dbsetorder(05))
NOT->(dBSeek(cControle,.t.))
do while NOT->NROCAX == cControle .and. NOT->(!eof())
........
........
ENT->(dBSeek(NOT->NRONOTA,.t.))
do while NOT->NRONOTA == ENT->NRONOTA .and. ENT->(!Eof()
...........
..........
ENT->(dBSkip())
enddo
.............
NOT->(dBSkip())
enddo
usando indice NTX será que seria hora de mudar de Indice????
qual o melhor? e de que maneira mais facil mudaria???
entao, foi o que eu falei ali...um erro (grosseiro) desses, aconteceria em todos os clientes, nao apenas em um....
mas, o relatorio do nosso colega pode ter algum parametro pra entrar em um determinado laço que apenas um cliente usa. algo tipo um relatorio de caixa que pode sair a relação de vendas do dia, ou nao, dependendo do que o usuario informar...
mas eh um caso especifico...
o mais certo eh o nosso amigo postar o codigo dele para nossa apreciação, para podermos ajudar com mais segurança...fica no campo do "achismo" nao eh uma boa coisa...hehehehehehe
mas, o relatorio do nosso colega pode ter algum parametro pra entrar em um determinado laço que apenas um cliente usa. algo tipo um relatorio de caixa que pode sair a relação de vendas do dia, ou nao, dependendo do que o usuario informar...
mas eh um caso especifico...
o mais certo eh o nosso amigo postar o codigo dele para nossa apreciação, para podermos ajudar com mais segurança...fica no campo do "achismo" nao eh uma boa coisa...hehehehehehe
