Estruturação DBF

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

Estruturação DBF

Mensagem 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
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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 :?)
JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

Outra explicação

Mensagem 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
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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 :?)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Mensagem 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,
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
trapezus
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 06 Out 2005 21:38

Mensagem 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
Responder