В данной статье демонстрируется универсальный способ ограничить использование любого внешнего отчёта на СКД конкретными пользователями. Стандартные средства 1С, такие как роли, права доступа и RLS, такие возможности предоставляют в отношении конкретных объектов конфигурации. А для внешних отчётов, которые используются практически повсеместно, будь они встроены в конфигурацию или нет, в лоб задача не решается.
Время от времени в сообществе возникают обсуждения об универсальности и удобстве применения СКД. Масса возможностей, заложенных в СКД, будет и дальше давать повод пытливым умам разработчиков находить разные способы её нестандартного применения. С моей точки зрения, оптимально её применять для тех задач, для решения которых она и создавалась, то есть, для создания отчётов. В том числе и внешних.
Наверно, Америку не открою, но надеюсь, что описанный ниже работающий способ предоставления внешним отчётом информации определённым пользователям будет полезен читателям. Поскольку цель СКД декларируется как «создание отчётов без строчки кода», то и решение кода не содержит.
Способ подходит для любых форм, проверен как на платформе 8.2.19.83 в нестандартной конфигурации, так и на платформе 8.3.15.65 , в УНФ 1.6.19.215 и БП 3.0.75.70.
Идея заключается в изменении постановки задачи. Если в 1С нет средств для ограничения доступа к внешнему отчёту отдельному пользователю, то можно ограничить ему доступ не к самому отчёту, а к его информации.
Добавим к произвольному отчёту поле с типом булево и значением Истина. Например, «ВОтчёте». Схему компоновки данных построим из двух наборов, первый из которых не будет содержать какой-либо таблицы, а только два параметра ТекущийПользователь и РазрешённыеПользователи:
и одно поле «ВОтчёте», которое принимает значение Истина, если значение параметра «ТекущийПользователь» входит в список значений параметра «РазрешенныеПользователи» и Ложь в противном случае. Чтобы это работало, на вкладке «Параметры» нужно задать их тип: СправочникСсылка.Пользователи, для параметра «РазрешенныеПользователи» указать доступность списка значений, для параметра «ТекущийПользователь» задать выражение, возвращающее текущего пользователя из параметров сеанса конфигурации.
Здесь нужно убедиться, что выражение верно, потому что оно зависит от используемой версии БСП и конфигурации. Ниже указано выражение для БП 3.0.75.70.
Поскольку СКД, в режиме «Конфигуратор», предоставляет возможность задания только предопределённых значений справочника,
то нужно запустить отчёт и, не формируя его, зайти в «Настройки» в расширенном режиме и задать список тех пользователей, для которых данные отчёта будут доступны в параметр «РазрешенныеПользователи»:
Затем вернуться в Конфигуратор и для обоих параметров ограничить их доступность в пользовательском режиме:
Второй набор – данные, которые должен выводить отчёт. К нему нужно добавить поле «ВОтчёте» со значением Истина.
Для примера возьмём отчёт УНФ «Сведения о пользователях». Добавим к нему набор данных «РазрешенныеПользователи» так, как показано выше. Результирующий набор отчёта – объединение, поэтому нужно добавить поле «ВОтчёте» ко всем запросам объединения. По вычисляемому полю связь между наборами СКД установить не позволит.
И ограничить доступность этого поля для пользователя.
Осталось соединить оба набора данных по полю «ВОтчёте»:
Собственно, всё. Теперь, при запуске отчёта пользователем, не входящим в заданный ранее список, первый набор данных «РазрешенныеПользователи» выдаст Ложь, связь не установится и пользователю будут недоступны данные отчёта. И наоборот, в другом случае.
Таким образом, с помощью встроенных средств СКД, без программирования, можно решить задачу ограничения доступности информации внешнего отчёта по пользователям. Для ленивых читателей прилагаю файл отчёта с набором данных РазрешенныеПользователи. Скачивание не обязательно, можно просто воспользоваться подробной информацией из статьи.
Всем успехов и здоровья!