Фильтр по нескольким датам

Евгений_РМ
Дата: 30.11.2012 21:35:31
Доброго времени суток!
У меня вопрос: как создать фильтр по нескольким датам. Например в таком виде 01.10.2012=05.11.2012=15.11.2012 и т.д.
Dag
Дата: 30.11.2012 21:46:25
set filter to INLIST(MyDate,{^2012.10.01},{^2012.11.05},{^2012.11.15 })
Евгений_РМ
Дата: 01.12.2012 17:57:30
Немного не то. Для наглядности приведу пример фильтра для поиска по одной дате:

ppowstring = ''
v30 = ''
if thisform.pageframe1.page1.check11.value = 1
v33 = alltrim(thisform.pageframe1.page1.edit4.value)
v30 = '{^' + substr(v33,7,4) + '-' + substr(v33,4,2) + '-' + substr(v33,1,2) + '}'
do case
case thisform.pageframe1.page1.combo11.value == '='
ppowstring = per_tab + ".dat_v = " + v30
case thisform.pageframe1.page1.combo11.value == '<>'
ppowstring = per_tab + ".dat_v <> " + v30
fltr10 = ppowstring
else
fltr10 = '.t.'
endif
Dima T
Дата: 01.12.2012 19:05:56
Евгений_РМ
Немного не то.

чего не то? ты сейчас из одной даты генеришь строку:
per_tab + ".dat_v = {^2012-10-01}"

сгенри
"INLIST("+ per_tab + ".dat_v,{^2012-10-01},{^2012-11-05},{^2012-11-15})"

вместо <> сделай "!INLIST(...
AndreTM
Дата: 02.12.2012 07:29:26
Не, я так понял, что ТС пишет несколько дат в одну строчку, с разделителем "=".
Можно сделать так:
set date german
lcDatesList = alltrim(thisform.pageframe1.page1.edit4.value) && '01.10.2012=05.11.2012=15.11.2012'
lcDatesFilt = 'INLIST(f1,CTOD("' + strtran(lcDatesList,'=','"),CTOD("')+'"))'
set filter to &lcDatesFilt
Евгений_РМ
Дата: 03.12.2012 17:46:42
AndreTM
Не, я так понял, что ТС пишет несколько дат в одну строчку, с разделителем "=".
Можно сделать так:
set date german
lcDatesList = alltrim(thisform.pageframe1.page1.edit4.value) && '01.10.2012=05.11.2012=15.11.2012'
lcDatesFilt = 'INLIST(f1,CTOD("' + strtran(lcDatesList,'=','"),CTOD("')+'"))'
set filter to &lcDatesFilt


А вместо f1, что подставить?
AndreTM
Дата: 03.12.2012 17:51:07
Евгений_РМ,

... 'INLIST(' + per_tab + '.dat_v,CTOD("' + ...

А остальное вам всё понятно?
Евгений_РМ
Дата: 03.12.2012 17:57:26
AndreTM,

Да, спасибо!
Johny_Limony
Дата: 05.12.2012 19:59:03
То что нужно было)))
AndreTM
Дата: 05.12.2012 21:09:39
Johny_Limony
То что нужно было)))
Все же, я не советовал бы увлекаться использованием именно вышеприведенного подхода, поскольку он всё же обладает рядом недостатков - например, нужно понимать значение использования SET DATE, нужно всё равно быть уверенным, что входная строка соответствует шаблону, ну и то, что данный метод применим в Фоксе с его макроподстановкой. Если же отталкиваться от того, что код может формировать строки, например, для SQLExec(), то более правильно было бы распарсить строку, используя ALINES(), а затем в цикле собрать условие в нужном формате.