Página 1 de 1

Selecionar um intervalo para impressão

Enviado: 14 Out 2006 12:22
por Ricardo Sales Ribeiro
Boa Tarde
Amigos Clipeiros!

Estou de volta, com uma duvida q até agora não consegui resolver. è o seguinte:

Tenho um arquivo de Estoque chamado CadEst.Dbf, entre outros campos, q tem nele, além de CodEst, DesEst, QtdEst, tem tambem um campo chamado CodLoc de 5 caracteres onde informo a localização da peça. Ok

Exemplo Localização Estante A1 Gaveta 01 ou seja CodLoc:=´A1-01´ q vai até ´A1-06´ Cada letra é uma instante, A1 significa uma fileira de 6 gavetas ou seja vai de A1-01 até A1-06, e pode ir até A9-06.

Pois bem, antes de fazer o Balanço, o proprietario pediu para q eu emitisse um relatorio por gaveta, para q o pessoal pudesse contar o estoque e anotar as quantidades q forem encontradas, e assim serem posteriormente digitadas e alimentadas o sistema. Cada Gaveta tem uma planilhazinha com a descrição de cada peça. Ok

Bom eu estou tirando a listagem das papeletas por Estante, tipo ´A´ e sai todas, como fazer para imprimir por intervalo. Tipo da ´A1-01´até a ´A2-06´, por que as vezes a impressora engancha, e tenho q tirar o pacote todo.

O campo é Caractere tamanho 5 ou seja CodLoc C,5
Conteudo = ´A1-01´

Exemplo ´A1-01´, ´A1-02´,´A1-03´,´A1-04´,´A1-05´,´A1-06´
Quero imprimir o intervalo entre ´A1-03´ até ´A1-05´

Desde já, agradeço a colaboração dos amigos.
Um grande abraço

Enviado: 14 Out 2006 19:41
por rochinha
Amiguinho

O campo caractere obdece a uma ordem ok?

Assim como o campo NOME em cadastros de clientes o qual sempre usamos para filtrar do cliente que inicia com 'C' até o que inicia com 'E' então voce poderá fazer a mesma filtragem.

Código: Selecionar todos

USE CadEst INDEX CadEst // Melhor se a ordem for pelo campo CadLoc
cCadLocI := 'A1-03´
cCadLocF := 'A1-05´
dbGotop()
do while .not. eof()
     if alltrim( CadEst ) >= cCadLocI .and. alltrim( CadEst ) <= cCadLocF
        ... // Imprime os dados
     endif
     skip
enddo

Leve em consideração o código postado em [i]Relatorio perfeito e simples...[/i] no link:

https://pctoledo.org/forum/viewtopic.php?t=3649

Não existe nada de tão diferente nos codigos das posições as quais voce quer filtrar no arquivo que impeça que um mesmo tipo de filtro feito em um arquivo com nomes de clientes(que são todos diferentes) que voce não consiga fazer em seu CadEst.

Boa sorte,

@braços :?)

Enviado: 16 Out 2006 08:20
por MARCELOG
Se você usa índices cdx, basta criar um índice para o codloc e informar o escopo, é bem mais rápido que a proposta anterior, que também resolve integralmente o problema.

Simples exemplo

Procedure Teste()
Local cInicio:=cFim:=space(5)

Use CadEst exclusive(ou shared) new
index on cadloc tag cadloc to CadEst

/*
Se quiser que o relatório saia ordenado por outro campo, basta criar o índice camposto.
index on cadloc+CodEst tag cadloc1 to CadEst (Código)
index on cadloc+DesEst tag cadloc2 to CadEst (Descrção)
*/


DbSetIndex("CadEst")
OrdSetFocus("cadloc") // mude aqui para ordenar

@ 10,10 get cInicio
@ 12,10 get cFim;
When {|o|o:Varput(cInicio),.t.} //Prá iniciar com o cInicio - viadagem!!!
Read

OrdScope(0,cInicio)
OrdScope(1,cFim)

DbGoTop()

Do While !eof()
...
Impressão
...
DbSkip(1) //Prá ir para o registro seguinte
EndDo

OrdScope(0,Nil) // Importante para desativar o "filtro"
OrdScope(1,Nil) // Importante para desativar o "filtro"
...

Return

O ordscope tornará visível apenas os registros que atendam a faixa indicada em cInicio e cFim.

Espero ter ajudado.

MarceloG

Enviado: 16 Out 2006 09:01
por gvc
Fazendo uso do que o Rochinha respondeu:

USE CadEst INDEX CadLoc // Melhor se a ordem for pelo campo CadLoc
cCadLocI := 'A1-03´
cCadLocF := 'A1-05´

@ 05,05 say 'Pos Inicial:' get ccadloci
@ 06,05 say 'Pos Final:' get ccadlocf
read
dbseek(cCadLocI, .T.)
while !eof() .and. alltrim(CadEst) <= cCadLocF
... // Imprime os dados
dbskip()
end

Enviado: 16 Out 2006 12:25
por rochinha
Amiguinho

Como voce percebeu as soluções são várias bastando para vc implementa-las e ir agregando opções tornando suas filtragem mais complexas no resultado e mais simples na passagem de parametros.

@braços :?)

Enviado: 16 Out 2006 12:33
por Ricardo Sales Ribeiro
Valeu moçada!

Obrigado pelas sugestões, já implementei meu programa e já deu tudo certo.

Aprendi muito com essas sugestões, valeu mesmo. Obrigado.

Um grande abraço a todos