Selecionar um intervalo para impressão

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
Usuário Nível 3
Mensagens: 279
Registrado em: 13 Jul 2004 18:06
Localização: Fortaleza-Ceara

Selecionar um intervalo para impressão

Mensagem 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
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4665
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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 :?)
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.
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem 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
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4665
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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 :?)
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.
Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
Usuário Nível 3
Mensagens: 279
Registrado em: 13 Jul 2004 18:06
Localização: Fortaleza-Ceara

Mensagem 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
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
Responder