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
Selecionar um intervalo para impressão
Moderador: Moderadores
- Ricardo Sales Ribeiro
- Usuário Nível 3

- Mensagens: 279
- Registrado em: 13 Jul 2004 18:06
- Localização: Fortaleza-Ceara
- rochinha
- Administrador

- Mensagens: 4665
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
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.
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.
@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

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
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
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
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
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}
{POG - Programação Orientada a Gambiarra}
- rochinha
- Administrador

- Mensagens: 4665
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
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 :?)
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- Ricardo Sales Ribeiro
- Usuário Nível 3

- Mensagens: 279
- Registrado em: 13 Jul 2004 18:06
- Localização: Fortaleza-Ceara
