Página 1 de 1

Estruturação DBF

Enviado: 02 Dez 2005 20:14
por JuniorVaz
Dai parceros, estou com o seguinte problema. tenho um dbf com a seguinte estrutura:

EAN CODREF CODMAT NUMERO
1231231231233 10205 110 33
1231231231233 10205 110 33
1231231231234 10205 110 34
1231231231234 10205 110 34
1231231231234 10205 110 34
1231231231235 10205 110 35
1231231231235 10205 110 35
1231231231235 10205 110 35
1231231231235 10205 110 35

POR EXEMPLO

eu preciso que mneu prg analise cada linha deste prg, e faça o processamento para que seja gravado no seguinte dbf.


CODREF CODMAT 33 34 35 36 37
10205 110 2 3 4


sendo que neste segundo dbf ele ignora o campo EAN
POR EXEMPLO

meu primeiro DBF é o estoque.dbf e o segundo é prepest.dbf

ja tentei de varias formas aki mas acontecem muitos erros e nunca da certo, pediria a vcs alguma ideia. VLW

Enviado: 02 Dez 2005 23:42
por rochinha
Amiguiinho

Acho que estou com muito sono ou não consegui entender muito bem o que voce fez, que tal se voce colocasse aqui o trecho da sua rotina que vai de onde ele pega os dados do primeiro .DBF até quando ele coloca no segundo .DBF talvez possamos encontrar o problema.

@braços :?)

Outra explicação

Enviado: 03 Dez 2005 13:42
por JuniorVaz
Vou tentar explicar novamente. hehehe. acho que eu que estava com sono. :P vou dar outro exemplo melhor especificado do que eu preciso fazer: tenho o seguinte DBF:

CODREF ------ CODMAT ------CODCOR ------ T01---T02---T03---T04---T05---T06---T07---T08
10200 ----------110------------10----------------0------2------0------0---- 0----------0-------0-----0

10200 ----------110------------10----------------0------0------3------0---- 0----------0-------0-----0

10200 ----------110------------10----------------0------0------0------4---- 0----------0-------0-----0

10200 ----------110------------10----------------0------0------0------0---- 5----------0-------0-----0

10200 ----------110------------10----------------0------0------0------0---- 0----------4-------0-----0

10200 ----------110------------10----------------0------0------0------0---- 0----------0-------2-----0

10315 ----------120------------19----------------0------2------0------0---- 0----------0-------0-----0

10315 ----------120------------19----------------0------0------3------0---- 0----------0-------0-----0

10315 ----------120------------19----------------0------0------0------4---- 0----------0-------0-----0

10315 ----------120------------19----------------0------0------0------0---- 5----------0-------0-----0

10315 ----------120------------19----------------0------0------0------0---- 0----------4-------0-----0

10315----------120------------19----------------0------0------0------0---- 0----------0-------2-----0


Então eu tenho outro DBF que serve para juntar tais informações a modo de gerar um relatorio para o cliente, no caso fikarioa assim:

CODREF ------ CODMAT ------CODCOR ------ T01---T02---T03---T04---T05---T06---T07---T08
10200 ----------110------------10----------------0------2------3------4------5---------4------2
10315 ----------120------------19----------------0------2------3------4------5---------4------2

Seria isto, no caso o primeiro DBF se chama ESTOQUE.DBF e o segundo PREPEST.DBF. Se fikou alguma duvida de um tok. VLW

Enviado: 03 Dez 2005 19:06
por rochinha
Amiguinho

Agora ficou mais visivel.

Voce tera de usar a técnica do relatório resumido que consiste em juntar dados de um determinado critério que neste caso seria o CODREF.

Faça um do..while na primeiro .DBF do inicio ao fim, pegue o CODREF que voce quer e em outro do..while voce executa a gravação enquanto o CODREF do registro sendo lido seja igual ao CODREF que voce pegou. Quando o CODREF for diferente do CODREF sendo verificado, sai do loop interno e volta ao loop do primeiro .DBF.

exemplo:

Código: Selecionar todos

USE primeiro NEW
USE segundo NEW

SELE primeiro
GO TOP
do while .not. eof()
     nCODREF := primeiro->CODREF
     do while .t.
          if primeiro->CODREF = nCODREF
             // Pega dados de T01...T08
             SELE segundo
             // Adiciona registro e salva os dados de T01...T08
             SELE primeiro
             skip
             loop
          endif
          skip -1 // retorna ao CODREF corrente pois fora deste loop ... 
          exit
     enddo
     skip // ...ira pular para o proximo CODREF
enddo
O codigo acima pegara o codigo 10200 e dentro do loop 2 ira efetuar o preenchimento do segundo.DBF enquanto o CODREF for 10200 e depois sairá do segundo loop passando a verificar o codigo do primeiro .DBf

@braços :?)

Enviado: 04 Dez 2005 13:00
por ANDRIL
Ola JuniorVaz,

Já tentou utilizar o comando TOTAL ON para fazer tal totalizacao.

-crie um indice com o campo CODREF.
-agora crie um arquivo totalizador para cada CODREF


TOTAL TO novoarq ON codref FIELDS T01,T02,T03,T04,T05,T06

Abra o novo arquivo totalizado e veja se era isso o que queria fazer


Abraços,

Enviado: 08 Dez 2005 01:32
por trapezus
Ola! JuniorVaz

A linha que o Andril sugeriu funciona corretamente, mesmo se o arquivo estiver na casa do 1.000.000.000 de registros.

Já testei e deu certo.

Um Abraço

Trapezus