Параметр пользовательского фильтра в подзапросе этого фильтра

Добрый день.
Создал иерархический справочник "Варианты" со структурой (ID, ParentID, Name) и в таблице задач (tbl_Task) создал поле, ссылающееся на этот справочник.
Хочу сделать такой пользовательский фильтр, чтобы выбирал задачи, у которых значение варианта совпадает с выбранным в фильтре или было подчиненным ему.
Есть значения
1.0
|- 1.1
|- 1.2
|- 1.3
2.0
|- 2.1
|- 2.1.1
и т.п.
Я хочу,чтобы после применения этого фильтра при значении 1.0 отбирались задачи со значениями вариантов 1.0, 1.1, 1.2 и 1.3.

Я хотел реализовать это с помощью пользовательского фильтра справочника. Для этого я сделал табличную функцию, которая принимает ID записи из фильтра и возвращает ID этой записи и всех ее потомков. Но для пользовательского фильтра параметр запроса генерируется только при исполнении и не доступен в администраторе. Можно это как нибудь обойти?
Или другой вариант: можно ли обычный фильтр (не пользовательский) вывести на панель фильтров и заполнять параметр этого фильтра вручную?

Нравится

5 комментариев

Я так понимаю ID и ParentID - ссылки на данные одной и той же таблицы? Тогда просто добавьте пользовательский фильтр по полю ParentID. Значения будете выбирать из общего пула записей в данной таблице, а в результате будете получать только подчиненный к выбранной записи данные.

ps: возможно будет проблема с отображением данных в реестре после фильтрации, т.к. в наборе данных не будет представлен корневой элемент,и дерево не сможет отрисоваться. В таком случае необходимо использовать UNION по аналогии с разделом "Проекты".

Спасибо за ответ, но мне это не поможет, так как в справочнике может быть много уровней иерархии. Допустим, что узел 2.1.1 подчинен 2.1, а тот, в свою очередь, 2.0. Если я в фильтре укажу отобрать по 2.0, то получу только те задачи, у которых 2.0 и 2.1. 2.1.1 напрямую не подчинен и выведен не будет.
Я посмотрел в отладчике, при накладывании пользовательского фильтра генерируется что-то типа:

WHERE(([tbl_Task].[InformationTypeID] IN (:AutoGen_00160FA_4653CC2)))

Есть ли возможность добраться до этого механизма или это функционал самой платформы и из js не доступен?

Нет, нельзя... Генерация фильтров компонентом FuilterBuilder это ядровые механизмы.

ps: насколько я помню подчиненные элементы должны отрисоваться автоматом, т.е. при структуре

1
1.1
1.1.1
2
2.1
2.1.1

Если ввести в фильтр 1.1, то 1.1.1 у вас отобразится автоматом. Разумеется, если в выборке будет присутствовать и 1 (т.е. где запись ParentID = null). Это решается UNION'ом.

В любом случае - можете добавить какую либо кнопку и всю фильтрацию реализовать скриптом на JS.

День добрый!!! вот в Интернете нашел интересную статью. http://www.getinfo.ru/article610.html
Всю задачу что описал Riptor я бы решил в террасофте один в один как в Статье. Если требуется помощь в реализации данной статьи в Террасофте обращайтесь помогу. Только вот если честно так и не понял зачем Задачи делать Иерархические и еще со сложными Древовидностями? Цель какая?

Здравствуйте, Михаил.

Вероятно, речь идет о функционале, схожим с разделом "Проекты", но при этом реализованным на основе раздела "Задачи", т.к., возможно, пользователям привычнее работать именно с этим разделом.
Т.е. разбивать большие задачи на несколько маленьких и наглядно видеть структуру этих задач в самом реестре.

В любом случае, на Ваш вопрос лучше ответит автор данного "топика", г-н Riptor.

Показать все комментарии