Поле фильтра недоступное для редактирования

Ситуация состоит в следующем. В отчете FastReport задано стандартное окошко с фильтрами. При запуске отчета один из фильтров по умолчанию принимает значение текущего пользователя системы. Проблема в том, чтобы одним пользователям предоставить возможность редактировать это поле и выбирать/добавлять к отчету другие контакты, а другим пользователям блокировать его как поле "для чтения". Каким образом это можно реализовать?

Нравится

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

Здравствуйте, Константин!

Решить эту задачу можно на уровне конфигурации. Сделать поле недоступным для редактирования можно следующим образом: в скрипте окна фильтрации добавить программный код

edtFieldName.IsEnabled = {условие};

где edtFieldName - название поля в карточке редактирования.

Программный код условия сильно зависит от того, по какому принципу включается разрешение. Например, если разрешено выбирать ответственного только администратору, тогда программный код примет вид:

edtFieldName.IsEnabled = Connector.CurrentUser.IsAdmin;

Спасибо, Анна, за ответ, но как раз в скрипте

edtFieldName.IsEnabled = {условие};

и есть загвоздка. Дело в том что, все фильтры находятся в контейнере IFiltersBuilderControlDataFieldsList, и у элементов этого списка нет такого свойства, как IsEnebled, лишь только Enebled, которое отвечает за активность фильтра (грубо говоря, стоит ли галочка). Возможно, я что-то не так понял и не там смотрю?

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

Возможно я не совсем точно сформулировал свой вопрос. В приложенном файле - фильтр, который используется в отчете. В поле "Ответственный" по умолчанию вставляется текущий пользователь. Так вот это поле мне нужно сделать со свойством "только чтение", чтобы пользователь смог просматривать отчет только по себе

Динамическое окно фильтрации не подерживает возможность делать один из фильтров нередактируемым - это контрол, поведение которого зашито в программном коде.

В данном случае есть два варианта решения:

1. Сделать пользовательское окно фильтрации, и отключать контрол в нем. Эта реализация корректна с точки зрения логики фильтрации;

2. Отлавливать окно выбора ответственного и фильтровать его датасет по текущему пользователю. В этом случае номинально возможность выбрать ответственного будет, однако в окне выбора польователь увидит только собственный контакт.

Спасибо большое

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