Relatorio com Filtro de 5 opçoes

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
matrix
Usuário Nível 3
Usuário Nível 3
Mensagens: 131
Registrado em: 06 Jul 2004 08:41
Localização: Paraná
Contato:

Relatorio com Filtro de 5 opçoes

Mensagem por matrix »

Pessoal,
no cadastro de produtos tenho os campos:
TAMANH_PRO.......(Tamanho da peça)
CODCOR_PRO......(Cor do produto)
ESTACA_PRO........(Estação - Verão / Inverno)
INDICA_PRO.........(Indicação - Masc / Fem)
TECIDO_PRO.........(Tipo do tipo do Tecido)
MARCA1_PRO........(Marca)
GRUPO1_PRO........(Grupo)

Isso em se tratando de produtos de confeçoes, agora meu cliente precisa de um relatorio de por exemplo somente as calças de verão, da marca malwee, da cor azul.............e assim por diante, sendo que em alguns casos será informado apenas um filtro generalizando os outros.

Como farei isso....????não sei se me expressei bem..........aguardo help.

Valeu
"Ter Problemas é Inevitável, ser derrotado por eles é opcional.!!"
Paulao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 09 Jul 2004 11:03
Localização: Franca
Contato:

Mensagem por Paulao »

Tenho colocado filtros deste tipos em meu sistema da seguinte forma:
Coloco as cinco opcoes para o cliente digitar o que quer
por exemplo
Tipo Calça
Tamanho GG
Cor PReta
Marca MAlwwe
Preco < 30

Se ele digitar só o tipo

if tipo <> spac(20)
Copy to temp for tipo="Calça"
else
COpy to temp
endi
sele temp
Se ele digitar tb o tamanho
if tamanho <> spac(02)
copy to temp2 for tamamho=="GG"
else
copy to temp2
endi
sele temp2


e assim por diante
se alguem tiver uma idéia mais elegante por favor nos mostre


Grande abraço
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Prezado Matrix

Outra opção seria...

USE CADPRO
COPY TO PROTEMP
USE PROTEMP

//Digamos que as variáveis de seleção sejam
COR=0
TAM=0
MAR=SPACE(20)

Código: Selecionar todos

IF COR<>0
    DELETE ALL FOR CODCOR_PRO<>COR
ENDIF
IF TAM<>0
    DELETE ALL FOR TAMANH_PRO<>TAM
ENDIF
IF MAR<>0
    DELETE ALL FOR MARCA_PRO<>MARCA
ENDIF
Agora é só criar o indice e mandar ver no relatório.

Até logo.

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
matrix
Usuário Nível 3
Usuário Nível 3
Mensagens: 131
Registrado em: 06 Jul 2004 08:41
Localização: Paraná
Contato:

Mensagem por matrix »

Valeu Galera :lol: , o Marcelo me sugeriu fazer um arquivo temporário eliminando tudo aquilo que é contrario ao filtro, e ficou show.

Abraços.
"Ter Problemas é Inevitável, ser derrotado por eles é opcional.!!"
Irineu
Usuário Nível 2
Usuário Nível 2
Mensagens: 61
Registrado em: 13 Ago 2003 22:01
Localização: Curitia-PR
Contato:

Mensagem por Irineu »

Eu utilizo filtros dessa maneira :

*********************************************
@ 10,5 get TAMANH
@ 11,5 get CODCOR
@ 12,5 get ESTACA
@ 13,5 get INDICA
@ 14,5 get TECIDO
@ 15,5 get MARCA1
@ 16,5 get GRUPO1
read
filtro := ""
If len(alltrim(tamanh)) > 0
filtro := [tamanh_pro == tamnh]
endif
if len(alltrim(codcor)) > 0
if len(alltrim(filtro)) > 0
filtro := filtro +[ .and. codcor_pro = codcor]
else
filtro := [codcor_pro == codcor]
endif
endif
if len(alltrim(estacao)) > 0
if len(alltrim(filtro)) > 0
filtro := filtro +[ .and. estacao_pro = estacao]
else
filtro := [estacao_pro == estacao]
endif
endif
if len(alltrim(indica)) > 0
if len(alltrim(filtro)) > 0
filtro := filtro +[ .and. indica_pro = indica]
else
filtro := [indica_pro == indica]
endif
endif
if len(alltrim(tecido)) > 0
if len(alltrim(filtro)) > 0
filtro := filtro +[ .and. tecido_pro = tecido]
else
filtro := [tecido_pro == tecido]
endif
endif
if len(alltrim(marca1)) > 0
if len(alltrim(filtro)) > 0
filtro := filtro +[ .and. marca1_pro = marca1]
else
filtro := [marca1_pro == marca1]
endif
endif
if len(alltrim(grupo1)) > 0
if len(alltrim(filtro)) > 0
filtro := filtro +[ .and. grupo1_pro = grupo1]
else
filtro := [grupo1_pro == grupo1]
endif
endif
if len(alltrim(filtro)) > 0
index on marca1_pro to ind_tmp for &filtro
endif
*****************************************
voce só tem que fazer as conversoões adequadas dos tipos de campos, por exemplo:
suponhamos que voce queira filtrar uma data
@ 10,5 get m_var_dta
read
filtro := [capo_dta = ctod("]+dtoc(m_var_dta)+[")]
Responder