Возникла задача реализовать фильтр на разницу между датой создания и датой фактического завершения задачи.
Как это сделать в Sql - понятно ( cast(DueDate as Int) - cast(CreatedOn as Int) > [параметр]).
Понятно, что нужно добавить параметр типа Int в запрос. А потом реализовывать подзапрос с использоваием колонки SQL. В теории все понятно, но упираюсь в конкретную реализацию.
Версия программы - Terrasoft Sales 3.1.0.16.
Нравится
Здравствуйте, Станислав!
Для реализации необходимого Вам фильтра требуется выполнить следующие действия:
1. Сперва следует обратить внимание на то, чтобы в запросе на выборку присутствовавли такие поля как DueDate и CreatedOn.
2. Создать новый параметр с типом "Целое цисло". Например, с названием "Duration".
3. Добавить новый фильтр в запрос на выборку с колонкой SQL.
4. В рабочую область данного фильтра необходимо вставить следующий текст:
(cast(DueDate as Int)) - (cast(CreatedOn) as Int) > :Duration
5. Сохранить внесенные изменения.
Желаем удачи!
Попытался реализовать, но уперся в то, что алиас для колонки с текстом SQL не виден в условиях фильтра where. Я прикрепил файл с настройкой фильтра. Выборка производится из таблицы задач, а в условиях фильтра устанавливается совпадение Id в таблицах Tbl_task и tbl_task1 и совпадение параметра QDay с алиасом колонки с текстом SQL. Вот последний шаг я не могу сделать.
Или я пошел неправильным путем по реализации? Можно более подробно описать реализацию (тип фильтра (сравнение, exist и т.п.), настройку условий where)? А может на моей версии это не реализуемо?
Здравствуйте, Станислав!
Для того, чтобы сравнить необходимый параметр со значением в колонке sql, Вам необходимо выполнить следующее:
1. Создать фильтр типа Exists.
2. В Exists фильтре у нас есть фильтр сравнения. Слева необходимо выбрать нужный параметр, а справа Value Subquery.
3. В свою очередь, в этом Value Subquery мы прописываем такую же колонку + нужные фильтры.
Также во вложении высылаем Вам скриншот.
Желаем удачи!
Создание отдельного запроса (фильтра) и применение его - это отдельная задача. Меня же интересует реализация данного фильтра в составе базового запроса sq_task. Все мои шаманства к положительному результату не привели. Трассировка профайлером показывает, что уходит запрос, подходящий по структуре со строкой в Where @P3=@P4, но @P3 имеет значение Null. Мне кажется, что работа с колонкой SQL в используемом мной build реализована не полностью, т.к. я не могу использовать алиас этой колонки в условиях Where
Здравствуйте, Станислав!
Благодарим Вас за предоставленную информацию. Мы попытались протестировать работоспособность предлагаемого фильтра - и он у нас работает, проблема не воспроизводится. К сожалению, исходя из предоставленного Вами описания довольно-таки сложно идентифицировать причины возникновения данной проблемы. Поэтому для более детального анализа и предоставления верного решения нам необходим сервис раздела задач sq_Task, в котором Вы пытаетесь реализовать необходимый фильтр. Пришлите, пожалуйста, в службу технической поддержки support@tscrm.com вышеупомянутый сервис (или же во вложении к письму на TerrasoftCommunity). Мы попытаемся идентифицировать причины возникновения проблемы и предоставить рекомендации,необходимые для реализации поставленной задачи.
Заранее благодарны Вам помощь.
Ожидаем Вашего ответа.
Добрый день!
У меня плхожая ситуация
Есть запрос sq_Upgrade, содержащий два поля DateARM и DateUpgrade (тип дата), необходимо создать фильтр для динамической группы по разнице этих дат. Сразу пришло в голову создать пользовательский sql фильтр, например : (("DateARM"-"DateUpgrade")>:Duration), где Duration - параметр, но вот на fmFilter раздела его не видно (хотя называется пользовательский).
Описанный выше метод также не работает тоже самое (я не могу использовать алиас этой колонки в условиях Where)
Буду благодарен за помощь
FIREBIRD 3.3.0.42
Здравствуйте, у меня вопрос, как можно отфильтровать по диапазону чисел, к примеру, в карточке редактирования создается два числовых поля, в одном указывается "Возраст С" в другом "Возраст По", и нужно отфильтровать так чтобы нужный мне возраст был в рамках этого диапазона, как это можно сделать?
если правильно поняла вопрос, создать фильтр between, указать 2 параметра и поле, значение которого должно быть в заданных пределах
Проблема в том что значения возростов будут разные, к примеру я создам 3 карточки в которых будут разные значения возростов от 14 до 17, от 10 до 24, от 18 до 60 и т.д. например мне нужно найти те карточки которые удовлетворяют условию 15 это будут карточки в которых указаны следующие диапазоны от 14 до 17 и от 10 до 24.
значит условие должно выглядеть так:
"Возраст С" <= <параметр> И "Возраст По" >= <параметр>,
<параметр> в данном случае 15, а вообще будете туда подставлять нужное значение
вы хотите создать пользовательский фильтр, я правильно понимаю?