• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Сравнение Дат В Search Formula

  • Автор темы juk-777
  • Дата начала
J

juk-777

ок... результат вот этого выкладывайте:
Код:
msgbox searchFormula$
вставить после формулы, но до search

это кусок текста, присвоенно переменной из дебагера (больше на экран не вместилось):
" Form = ""VhodStandart"" & @Left(ТИП_ДОКУМЕНТА;6)=""Жалобы"" & ДАТА_РАЗРЕШ_ОБРАЩ_<> """" & @TextToTime(@text(ДАТА_РАЗРЕШ_ОБРАЩ_)) => [01.07.2013] & @TextToTime(@text(ДАТА_РАЗРЕШ_ОБ...

Сейчас попробую скрин Msbox сюда выложить ...
 

Вложения

  • searchformula.JPG
    searchformula.JPG
    15,8 КБ · Просмотры: 536

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
хз, вроде все верно.
Проверяйте через представление. Вставляйте по куску из формулы. сначала форму, затем тип и так далее.

Добавлено: русские имена полей это треш...
 
G

gpatron

Попробуй так сделать:

searchFormula$ = { Form = "VhodStandart" & @Left(ТИП_ДОКУМЕНТА;6)="Жалобы" & ДАТА_РАЗРЕШ_ОБРАЩ_<> "" & @Date(@TextToTime(@text(ДАТА_РАЗРЕШ_ОБРАЩ_))) => [}+ begindata.Dateonly +{] & @Date(@TextToTime(@text(ДАТА_РАЗРЕШ_ОБРАЩ_))) =< [}+ enddata.Dateonly +{] }

правда любое дополнительное преобразование вроде как замедляет поиск.. но тем не менее попробуй..... скорее всего какая-то лажа у тебя со значениями в документах
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Сначала, за использование текстового поля для хранения даты надо дать по рукам как можно быстрее.
Потом, если есть возможность, то изменить тип поля на дату и обработать все созданные документы.

@TextToTime(@text(ДАТА_РАЗРЕШ_ОБРАЩ_)) - так делать нельзя, потому что результат будет зависеть от системных настроек формата даты. У одних дата 5.1.2013 будет 5 января 2013, у других 1 мая 2013.
Правильно делать через @Date(year; month; day). Для этого из ДАТА_РАЗРЕШ_ОБРАЩ_ нужно выдернуть день, месяц и год.
 
J

juk-777

Сначала, за использование текстового поля для хранения даты надо дать по рукам как можно быстрее.
Потом, если есть возможность, то изменить тип поля на дату и обработать все созданные документы.

@TextToTime(@text(ДАТА_РАЗРЕШ_ОБРАЩ_)) - так делать нельзя, потому что результат будет зависеть от системных настроек формата даты. У одних дата 5.1.2013 будет 5 января 2013, у других 1 мая 2013.
Правильно делать через @Date(year; month; day). Для этого из ДАТА_РАЗРЕШ_ОБРАЩ_ нужно выдернуть день, месяц и год.

Написал следующую конструкцию в формулу выбора во вьюхе:
SELECT ( Form = "VhodStandart" & @Left(ТИП_ДОКУМЕНТА;6)="Жалобы" & ДАТА_РАЗРЕШ_ОБРАЩ_<> "" & @Date( @Right(ДАТА_РАЗРЕШ_ОБРАЩ_;4); @Right(@Left(ДАТА_РАЗРЕШ_ОБРАЩ_;5);2); @Left(ДАТА_РАЗРЕШ_ОБРАЩ_;2) ) => @Date(2013;07;01) )
Чтобы посмотреть отобразатся ли документы, в которых ДАТА_РАЗРЕШ_ОБРАЩ_ больше 01.07.2013
Результат отбора - 0 документов.

Дополнение:
при формуле SELECT ( Form = "VhodStandart" & @Left(ТИП_ДОКУМЕНТА;6)="Жалобы" & ДАТА_РАЗРЕШ_ОБРАЩ_<> "") все документы, удовлетворяющие условию отображаются. То есть снова уперся в формулу сравнения текста с датой ((((
 
A

afest

а может действительно проще сделать вьюху с нужным селектом и делать коллекцию из тех доков? я у себя почти все такие моменты так и сделал...

2gpatron: МЮ привет!
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
Вот-вот... вьюха лучший контроллер:
SELECT Form = "VhodStandart" & @Left(ТИП_ДОКУМЕНТА;6)="Жалобы" & ДАТА_РАЗРЕШ_ОБРАЩ_!= "" & @Date(@TextToNumber(@Right(ДАТА_РАЗРЕШ_ОБРАЩ_;4));@TextToNumber(@Right(@Left(ДАТ
А_РАЗРЕШ_ОБРАЩ_;5);2));@TextToNumber(@Left(ДАТА_РАЗРЕШ_ОБРАЩ_;2))) >= @Date(2013;07;01)

Из двух документов нашел 2.
Потому что Help не прочитали, параметры для @Date - числа, а не текст. который возвращается через @Right и @Left
Повторяем до достижения цели с другой границей диапазона.

SELECT Form = "VhodStandart" & @Left(ТИП_ДОКУМЕНТА;6)="Жалобы" & ДАТА_РАЗРЕШ_ОБРАЩ_!= "" & @TextToTime(ДАТА_РАЗРЕШ_ОБРАЩ_) >= @Date(2013;7;1) & @TextToTime(ДАТА_РАЗРЕШ_ОБРАЩ_) <= @Date(2013;7;31)
Этот вариант тоже отработал, да при разных форматах дат может быть ошибка.
 
J

juk-777

СПАСИБО ВСЕМ ОГРОМНОЕ!
У меня все получилось! Просто афигенски теперь все работает!!!
Сделал вьюхую с формулой отбора:
SELECT ( Form = "VhodStandart" & @Left(ТИП_ДОКУМЕНТА;6)="Жалобы" & ДАТА_РАЗРЕШ_ОБРАЩ_!= "" & @Date( @TextToNumber(@Right(ДАТА_РАЗРЕШ_ОБРАЩ_;4)); @TextToNumber(@Right(@Left(ДАТА_РАЗРЕШ_ОБРАЩ_;5);2)); @TextToNumber(@Left(ДАТА_РАЗРЕШ_ОБРАЩ_;2)) ) >= @Date(2013;7;1) & @Date( @TextToNumber(@Right(ДАТА_РАЗРЕШ_ОБРАЩ_;4)); @TextToNumber(@Right(@Left(ДАТА_РАЗРЕШ_ОБРАЩ_;5);2)); @TextToNumber(@Left(ДАТА_РАЗРЕШ_ОБРАЩ_;2)) ) <= @Date(2013;7;31) )
Все необходимые документы благополучно отразились в представлении.

Далее уже по аналогии перегнал в код агента .. получилось:
searchFormula$ = { Form = "VhodStandart" & @Left(ТИП_ДОКУМЕНТА;6)="Жалобы" & ДАТА_РАЗРЕШ_ОБРАЩ_!= "" & @Date( @TextToNumber(@Right(ДАТА_РАЗРЕШ_ОБРАЩ_;4)); @TextToNumber(@Right(@Left(ДАТА_РАЗРЕШ_ОБРАЩ_;5);2)); @TextToNumber(@Left(ДАТА_РАЗРЕШ_ОБРАЩ_;2)) ) >= [}+ begindata.Dateonly +{] & @Date( @TextToNumber(@Right(ДАТА_РАЗРЕШ_ОБРАЩ_;4)); @TextToNumber(@Right(@Left(ДАТА_РАЗРЕШ_ОБРАЩ_;5);2)); @TextToNumber(@Left(ДАТА_РАЗРЕШ_ОБРАЩ_;2)) ) <= [}+ enddata.Dateonly +{] }

Громоздко, но работает!!! Можно конечно чутка усовершенствовать (в местах @right, @left и т.п., чтоб значение бралось не по количеству цифр, а до точки или после точки в дате).. но эт уже мелочи!

Всем еще разок - огромный респект! Очень выручили ребятки! Спасибо за терпение, советы и профессионализм!
Вы - лучшие!
 
A

Anatoly

Как-же приходится извращаться когда дата хранится в текстовом поле....
 
30.05.2006
1 345
12
BIT
0
К примеру интервал у меня с 01.07.2013 по 31.07.2013
Кроме нужных доков, у меня в коллекцию попадают документы у которых в поле, по которому критерий отбора, есть цифра 07 например. То есть в коллекции у меня документы с датой (поле текстовое) 07.08.2013. Хотя их тут быть не должно ))
А, ну понятно.
В поле текстовой даты разных документов записаны временА в разном формате (DD/MM/YY и MM/DD/YY например)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!