Erro na manipulação de arquivo de dados

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ticommsc
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 15 Set 2010 13:32
Localização: sao paulo

Erro na manipulação de arquivo de dados

Mensagem por ticommsc »

Sou novo no clipper e preciso resolver um esquema aqui.
Na hora que chega na impressao dos produtos ele pega o codcupom e imprime ate o final do Banco de Dados, ele teria que retorna ao item 2 do produto O codigo esta em negrito no final onde esta o erro.

Código: Selecionar todos

! cls
set exclusive off
set date british
set century on

codcupom=space(06)
clicod=space(06)
prodcod=space(06)
vrazaoso=space(40)
vcodcli=space(6)
vcgc=space(18)
venderec=space(35)
vbairro=space(20)
vcep=space(8)
vcidade=space(20)
vetelfon=space(11)
vestado=space(2)
vinscrica=space(14)
wdata=date()
wtime=time()

do while .t.
   select 1
   use stkmovv
   set index to stkmov3

   select 2
   use crcli
   set index to ntxcli

   select 3 
   use stkparam

   select 4
   use stkmaste
   set index to stkmaste
   
   nnf=space(06)
   select 3
   nnf=seqnf
   codcupom=space(06)
   @ 01,01 clear to 24,79
   @ 10,15 say "DIGITE O CUPOM FISCAL: " get codcupom pict "999999"
   read
   if lastkey () = 27
      clear
      exit
   endif
   
   select 1
   find (codcupom)
   clicod=codcli

   select 2
   find (clicod)
   vrazaoso=razaosoc
   vcgc=cgc
   venderec=endereco
   vbairro=bairro
   vcep=cep
   vcidade=cidade
   vtelefon=telefone
   vestado=estado
   vinscrica=inscricao
  
   nnf=nnf+1
      
   select 3
   lock()
   replace seqnf with nnf
   unlock
   
   clear
   set device to printer
   @ prow(),pcol() say chr(27)+chr(64)
   setprc(0,0)
   @ prow(),pcol() say chr(27)+chr(48)
   @ prow(),pcol() say chr(27)+"C"+chr(68)
   @ prow(),pcol() say chr(27)+"M"+chr(15)
   @ prow(),pcol() say chr(27)+"Q"+chr(120)
   @ prow() ,00 say " " 
   @ prow() ,69 say "XX"
   @ prow() ,94 say strzero(nnf,6,0)+chr(10)+chr(10)+chr(10)+chr(10)+chr(10)
   @ prow() ,02 say "VENDA"
   @ prow() ,35 say "5102"+chr(10)+chr(10)+chr(10)
   @ prow() ,00 say vrazaoso+" "+left(clicod,5)+"-"+right(clicod,1)
   @ prow() ,68 say vcgc
   @ prow() ,95 say dtoc(wdata) +CHR(10)+CHR(10)
   @ prow() ,00 say venderec 
   @ prow() ,58 say vbairro
   @ prow() ,79 say vcep
   @ prow() ,95 say dtoc(wdata)+chr(10)+chr(10)
   @ prow() ,00 say vcidade
   @ prow() ,45 say vtelefon
   @ prow() ,63 say vestado
   @ prow() ,70 say vinscrica
   @ prow() ,95 say time()+chr(10)+chr(10)+chr(10)
   
  [b] select 1
   seek (codcupom)
   do while !eof()
      @ prow() ,00 say descricao
      codprod=codigoprod
      select 4
      seek (codprod)
      if found()
         @ prow() ,53 say cod_trib
         @ prow(), 58 say unidestoq
         @ prow(), 72 say prvvmn_v pict "9999.9999"
         @ prow(), 104 say alicmest pict "99"
         select 1
      endif
      @ prow(), 63 say qtdsaida pict "9999999.9"
      @ prow(), 89 say vlvencruz pict "99999999.99"
      @ prow(), pcol() say chr(10)
      skip
   enddo[/b]   
   set printer to lpt1
   set device to screen
enddo


---
Nota da Moderação (Maligno):
O título do tópico foi alterado. O anterior, "Ajuda no fonte abaixo", em nada ajuda na identificação do tópico, o que contraria as regras do fórum, que pedem um título objetivo. Leia as regras aqui. Dê especial atenção ao artigo 8.
Editado pela última vez por Maligno em 29 Set 2010 22:40, em um total de 2 vezes.
Razão: Favor usar a TAG CODE para utilização de códigos nos post
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Ajuda no fonte abaixo

Mensagem por rochinha »

Amiguinho,

Quando postar seu codigo coloque-o dentro das tags CODE para facilitar a visualização.

Código: Selecionar todos

select 1
seek (codcupom)
do while !eof()
    @ prow() ,00 say descricao
    codprod=codigoprod
    select 4
    seek (codprod)
    if found()
       @ prow() ,53 say cod_trib
       @ prow(), 58 say unidestoq
       @ prow(), 72 say prvvmn_v pict "9999.9999"
       @ prow(), 104 say alicmest pict "99"
       select 1
    endif
    @ prow(), 63 say qtdsaida pict "9999999.9"
    @ prow(), 89 say vlvencruz pict "99999999.99"
    @ prow(), pcol() say chr(10)
    skip
enddo
Tenho pra mim que voce deseja imprimir "O CUPOM" e não todos.

Para tal voce deverá fazer o SEEK no arquivo pai e SE encontra-lo fazer o SEEK no arquivo filho e SE encontrar iniciar o LOOP.

Ainda dentro deste LOOP voce deve fazer a critica para que o mesmo atue somente nos registros filhos que fazem referencia ao pai.

Exemplos:

Código: Selecionar todos

select 1
seek (codcupom)
if found() // Se encontrei o registro PAI continuo
   select 4
   seek (codprod)
   if found() // Se encontrei o(s) registro(s) filho(s), continuo
       do while !eof()
           if codprod <> codcupom // Se filho nao for deste pai...
              skip // ...pula para o proximo registro
              loop // e reinicia o loop de onde parou
           endif
           ...Imprime dados
           skip
       enddo
   endif
   ...
Outro método:

Código: Selecionar todos

select 1
seek (codcupom)
if found() // Se encontrei o registro PAI continuo
   select 4
   seek (codprod)
   if found() // Se encontrei o(s) registro(s) filho(s), continuo
       do while codprod = codcupom // Se filho nao for deste pai...
           ...Imprime dados
           skip
       enddo
   endif
   ...
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.
ticommsc
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 15 Set 2010 13:32
Localização: sao paulo

Re: Ajuda no fonte abaixo

Mensagem por ticommsc »

rochinha obrigado pela atenção mas ainda nao resolveu meu problema...

no 1 codigo >>> ele pegou somente o 1 produto do cupom fiscal

e no 2 codigo >>> nao retornou denhum produto.


deixa eu exemplicar os dbf...

seguinte o dbf é composto da seguinte forma:

stkmovv >>>>> movimento vendas

codcupom codproduto vlvendaunit vlvendatotal
000001 000002 1,00 2,00 >>>>>>>>>>>>mesmo cupom fiscal com diversos produtos
000001 002122 2,52 2,52
000001 212222 3,01 9,03



stkmaste >>>>> dbf de produtos onde estao cadastrado o restante das informações que preciso dos produtos...

codigoprod descricao cod_trib
000005 lapis 00
000010 caneta 04


PRECISO JUNTAR AS INFORMACOES DAS 2 TABELAS.....


mais uma vez obrigado...
SandroBelarmino
Usuário Nível 3
Usuário Nível 3
Mensagens: 464
Registrado em: 04 Set 2007 16:11
Localização: Pedreira-SP

Re: Ajuda no fonte abaixo

Mensagem por SandroBelarmino »

Pelo que entendi do seu problema, e vi no seu codigo, voce precisa mudar 2 coisas:
Primeiro: a linha 13, onde volta pro dbf de movimentação (select 1) voce precisa colocar pra fora do endif da linha 14
Segundo: no laço do while !eof() que voce faz no banco de movimentação, se voce tem gravado todos os cupons, voce tem que colcocar uma condição para verificar se o cupom não é mais o que voce procurou, para sair do laço, por isso ele está indo até o final do arquivo.

Sandro.
Alessandro R Belarmino
Clipper 5.2e - Blinker 7 - DBFNTX / DBFCDX
"Quem trabalha muito erra muito, quem trabalha pouco erra pouco, quem não trabalha não erra e quem não erra é promovido !!!!"
ticommsc
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 15 Set 2010 13:32
Localização: sao paulo

Re: Ajuda no fonte abaixo

Mensagem por ticommsc »

sandro...


ainda nao deu, mesmo assim obrigado pelo atenção
ticommsc
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 15 Set 2010 13:32
Localização: sao paulo

Re: Ajuda no fonte abaixo

Mensagem por ticommsc »

Pelo amor de DEUS, estou perdendo os poucos neuronios que tenho....
hehehehehehehehe!!!!

ONDE ESTOU ERRANDO?????????? PLEASE...

Código: Selecionar todos

! cls
set exclusive off
set date british
set century on

codcupom=space(06)
clicod=space(06)
prodcod=space(06)
vrazaoso=space(40)
vcodcli=space(6)
vcgc=space(18)
venderec=space(35)
vbairro=space(20)
vcep=space(8)
vcidade=space(20)
vetelfon=space(11)
vestado=space(2)
vinscrica=space(14)
wdata=date()
wtime=time()

do while .t.
   select 1
   use stkmovv
   set index to stkmov3

   select 2
   use crcli
   set index to ntxcli

   select 3 
   use stkparam

   select 4
   use stkmaste
   set index to stkmaste
   
   nnf=space(06)
   select 3
   nnf=seqnf
   codcupom=space(06)
   @ 01,01 clear to 24,79
   @ 10,15 say "DIGITE O CUPOM FISCAL: " get codcupom pict "999999"
   read
   if lastkey () = 27
      clear
      exit
   endif
   
   select 1
   find (codcupom)
   clicod=codcli

   select 2
   find (clicod)
   vrazaoso=razaosoc
   vcgc=cgc
   venderec=endereco
   vbairro=bairro
   vcep=cep
   vcidade=cidade
   vtelefon=telefone
   vestado=estado
   vinscrica=inscricao
  
   nnf=nnf+1
      
   select 3
   lock()
   replace seqnf with nnf
   unlock
   
   clear
   set device to printer
   @ prow(),pcol() say chr(27)+chr(64)
   setprc(0,0)
   @ prow(),pcol() say chr(27)+chr(48)
   @ prow(),pcol() say chr(27)+"C"+chr(68)
   @ prow(),pcol() say chr(27)+"M"+chr(15)
   @ prow(),pcol() say chr(27)+"Q"+chr(120)
   @ prow() ,00 say " " 
   @ prow() ,69 say "XX"
   @ prow() ,94 say strzero(nnf,6,0)+chr(10)+chr(10)+chr(10)+chr(10)+chr(10)
   @ prow() ,02 say "VENDA"
   @ prow() ,35 say "5102"+chr(10)+chr(10)+chr(10)
   @ prow() ,00 say vrazaoso+" "+left(clicod,5)+"-"+right(clicod,1)
   @ prow() ,68 say vcgc
   @ prow() ,95 say dtoc(wdata) +CHR(10)+CHR(10)
   @ prow() ,00 say venderec 
   @ prow() ,58 say vbairro
   @ prow() ,79 say vcep
   @ prow() ,95 say dtoc(wdata)+chr(10)+chr(10)
   @ prow() ,00 say vcidade
   @ prow() ,45 say vtelefon
   @ prow() ,63 say vestado
   @ prow() ,70 say vinscrica
   @ prow() ,95 say time()+chr(10)+chr(10)+chr(10)
   
   select 1
   seek (codcupom)
   codprod=codigoprod
   if found()
        do while !eof()
        @ prow() ,00 say descricao
        select 4
        seek (codprod)
        if codprod <> codcupom
            skip
            loop
         endif
         @ prow() ,53 say cod_trib
         @ prow(), 58 say unidestoq
         @ prow(), 72 say prvvmn_v pict "9999.9999"
         @ prow(), 104 say alicmest pict "99"
         select 1
         @ prow(), 63 say qtdsaida pict "9999999.9"
         @ prow(), 89 say vlvencruz pict "99999999.99"
         @ prow(), pcol() say chr(10)
         skip
         enddo
    endif
   set printer to lpt1
   set device to screen
enddo
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Ajuda no fonte abaixo

Mensagem por rochinha »

Amiguinho,

Bastei bater o olho e ver o erro!

Código: Selecionar todos

   select 1
   seek (codcupom)
   codprod=codigoprod
   if found()
        do while !eof()
        @ prow() ,00 say descricao
        select 4
        seek (codprod)
        if codprod <> codcupom
            skip
            loop
         endif
         @ prow() ,53 say cod_trib
         @ prow(), 58 say unidestoq
         @ prow(), 72 say prvvmn_v pict "9999.9999"
         @ prow(), 104 say alicmest pict "99"
         select 1
         @ prow(), 63 say qtdsaida pict "9999999.9"
         @ prow(), 89 say vlvencruz pict "99999999.99"
         @ prow(), pcol() say chr(10)
         skip
         enddo
    endif
Voce esa dando loop no estoque.

Veja, voce so tem dois arquivos que interessam vendas e estoque.

Código: Selecionar todos

   select 1
   seek (codcupom)
   codprod=codigoprod
   if found()
        do while codprod=codigoprod // Faz enquanto os codigos forem identicos
             @ prow() ,00 say descricao
             select 4 // Seleciona estoque
             seek (codprod)
             if found()
                 @ prow() ,53 say cod_trib
                 @ prow(), 58 say unidestoq
                 @ prow(), 72 say prvvmn_v pict "9999.9999"
                 @ prow(), 104 say alicmest pict "99"
             endif
             select 1
             @ prow(), 63 say qtdsaida pict "9999999.9"
             @ prow(), 89 say vlvencruz pict "99999999.99"
             @ prow(), pcol() say chr(10)
             skip
         enddo
   endif
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.
clrod
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 17 Nov 2009 13:42
Localização: São Paulo - SP

Re: Ajuda no fonte abaixo

Mensagem por clrod »

Olá

É o problema de usar número ao invés de nome da tabela.

Muita gente acha que escrever código legível é bobagem, mas tá um um exemplo que atrapalha muito.

Procure usar nomes ao invés de números para indicar o que está sendo feito/usado. Existem várias coisas nesse código que pode failmente causar confusão ao mais experiente programador.

T+
pedagogica
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 29 Set 2010 14:53
Localização: sao paulo

Re: Ajuda no fonte abaixo

Mensagem por pedagogica »

Desculpe, não ter retornando antes, é que tive problemas com minha conta "ticommsc" aqui no forum, pois nao conseguia recuperar a senha e nem logar, tentava criar outra conta, mas mesmo assim também sem sucesso.

Problema resolvido.


obrigado a Todos.
Responder