1с функциональные опции регистр сведений. Управление доступом: роли, права, профили, группы доступа, функциональные опции, RLS

Практически все типовые решения на платформе 1С:Предприятие 8.x используют механизм функциональных опций. Он позволяет управлять функциональностью конфигурации блочно.

Так, например, опция "Использование внутренних заказов" (см. скриншот справа) позволяет сделать доступным этот документ для использования в режиме "1С:Предприятие" пользователю, а также включает отдельные ветки алгоритмов, связанных с данным функционалом.

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

Принцип работы

Как было сказано выше, функциональная опция позволяет включать/отключать связанный с ней функционал конфигурации. Рассмотрим последовательность действий по созданию и настройке этого объекта конфигурации.

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

Свойства "Имя" и "Синоним" имеют стандартное назначение. Особый интерес вызывают настройки "Хранение" и "Состав".

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

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

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

Опция "Привилегированный режим при получении" позволяет отключить проверку прав доступа при получении значения функциональной опции, что позволит положительно повлиять на производительность (будут исключены излишние операции проверки прав доступа) и снизит сложность дальнейшей разработки (не нужно настраивать права для объекта, хранящего значение функциональной опции).

Пример использования

В нашей тестовой конфигурации создадим перечисление "Важность", а также константу

"ВключитьВажность". Созданные объекты представлены на следующем скриншоте.

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


В тестовом документе будут два реквизита:
  • "Комментарий" с типом "Строка".
  • "Важность" с типом "ПеречислениеСсылка.Важность".

В состав функциональной опции добавим реквизит документа "Важность" и далее рассмотрим поведение платформы в пользовательском режиме.

Запустив программу в режиме "1С:Предприятие" откроем тестовый документ. На форме мы не увидим реквизита "Важность", поскольку еще не включили функциональную опцию.

Чтобы включить использование реквизита "Важность" необходимо установить значение константы "ВключитьВажность" в ИСТИНА. Тогда форма изменится следующим образом:

Работа функциональных опций распространяется практически на все объекты конфигурации, за исключением некоторых из ветки "Общие", выполняющих в основном служебные функции. Например, нельзя в состав функциональной опции включить другие функциональные опции (да и смысла это особого не имеет).

Рассмотрим несколько интересных моментов работы данного объекта конфигурации:

1. Настройка функциональных опций практически никак не влияет на SQL-запросы, формируемых платформой.

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

2. Элемент формы "Важность" на форме, вне зависимости от значения функциональной опции, всегда имеет значения для свойств "Видимость" и "Доступность" равными ИСТИНА.

Действительно, как при создании формы на сервере, так и при открытии формы, а также при дальнейшей работе с ней, свойства "Видимость" и "Доступность" не устанавливаются в ЛОЖЬ платформой автоматически. Вероятно, 1С:Предприятие 8.x делает это "за кулисами".

3. Платформа для получения значения функциональной опции формирует SQL-запрос к СУБД в соответствии с объектом хранения, т.е. к константе. В одной из предыдущих статей мы уже говорили о построении SQL-запросов к константам и способе их хранения в базе данных.


В нашем примере платформа формирует следующий SQL-запрос:

Что касается момента получения значения функциональной опции, то платформа руководствуется следующим принципом: первое получение значения функциональной опции происходит при обращению к объекту/реквизиту, входящим в ее состав. В дальнейшем платформа использует кэшируемое значение до тех пор, пока не будет изменено значение объекта, который хранит это значение (в нашем примере - константы "ВключитьВажность") или перезапущен сеанс пользователя. Значение функциональной опции кэшируется в рамках отдельного сеанса.


Все вышесказанное проверил экспериментальным путем. Все, что использовал для экспериментов находится в тестовой конфигурации (ссылка в конце статьи), за исключением .

Вывод

Функциональные опции неотъемлемая часть практически любого тиражного решения на платформе 1С:Предприятие 8.x. Именно благодаря этому механизму можно создавать конфигурации с блочным построением функционала, который с легкостью включается/отключается при настройке программы. При этом возможности механизма можно расширить за счет использования параметров функциональных опций , но это уже тема для другой статьи.

За опыт работы с платформой очень редко приходится использовать функциональные опции, поскольку заказчик точно знает, что ему необходимо. И создавать какие-то универсальные механизмы, за которые придется дополнительно доплачивать, плюс не факт, что они будут использоваться, является очень редким при доработке типовых решений или внедрении на конкретном предприятии.

Файлы для загрузки:

С выходом платформы «1С:Предприятие 8.2» в дереве конфигурациипоявился новый объект – "Функциональные опции" . Он активно применяется во всех типовых конфигурациях, основанных на управляемых формах, и служит для упрощения процесса отображения отдельных реквизитов, объектов в интерфейсе. Например, в вашей конфигурации есть модуль для обмена с внешним веб-сервисов. Это модуль задействует ряд реквизитов в документах, регистрах и отдельные компоненты в подсистемах. Модуль является опциональным и необходим не каждой компании. Логично, раз модуль нужен не всем, то и отображать вся связанные с ним элементы/поля тоже нужно не всегда.

В старых версиях платформы, решение подобных задач требовало написание дополнительного кода, который приходилось вызывать во всех зависимых участках. Например, если нам требовались скрыть определенные реквизиты формы (в зависимости от значения настройки), то требовалось вызывать соответствующий код при открытии формы. Это было не очень удобно и в большинстве случаев разработчики на подобные вещи забивали.

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

Функциональные опции призваны решить эту и многие другие сложности, связанные с отображением элементов интерфейса/состава доступных объектов в пользовательском интерфейсе. В этой заметке я не буду рассматривать примеры использования основного назначения функциональных опций, а обращу внимание на применение их не совсем стандартным образом. Возможно, он знаком многим продвинутым разработчикам, но я к такому способу пришел совершенно случайно. Точней он был навеян практикой программирования на JavaScript.

Кейс №1: функциональная опция как обертка над другими объектами

Первая нестандартная фишка функциональных опций – возможность создавать обертки. Рассмотрим самый простейший пример – константы. Например, вы добавляете новую константу в конфигурацию с огромным количеством пользовательских ролей. Чтобы пользователи могли обращаться к значению константы вам необходимо установить соответствующим ролям права на чтение. Если права не выставить, то пользователи не смогут получить ее значение. Если ролей много и они не наследуются от базовой роли, то придется потратить время на простановку соответствующих флажков.

Функциональная опция может решить эту проблему более элегантно. Идея в следующем: создаем константу (например, ). Права на нее не назначаем. Создаем одноименную функциональную опцию и указываем в свойстве «Хранение» указываем константу «ВозможностьСохраненияДанных» . Также устанавливаем флаг «Привилегированный режим при получении» .

Все, теперь в любом месте кода, где требуется обратиться к константе пишем так:

Поскольку мы установили для опции привилегированный режим, то никаких дополнительных прав для константы указывать не нужно. Конечно, не нужно применять данную технику во всех случаях мыслимых и немыслимых ситуациях. Помните, грамотная расстановка прав – залог спокойствия. Используйте трюк только в действительно необходимых случаях.

Кейс №2. Дополнительный уровень абстракции

Не знаю, как правильней назвать этот способ, но в моем представлении он звучит именно так. Рассмотрим предыдущий пример. Есть у нас все та же константа «Возможность сохранения данных». Мы работаем с ней, используя одноименную функциональную опцию в качестве обертки.

Теперь представим, что нам захотелось избавиться от константы и перейти на использования справочника. Типичный сценарий решения такой задачи (если мы используем только константу) будет запуск инструмент глобального поиска с целью обнаружения обращения к константе. Напомню, если мы не используем функциональную опцию в качестве обертки, то константе мы должны обращаться так:

Константы.ВозможностьСохраненияДанных.Получить();

Находим все вызовы и заменяем на путь к новому объекту хранения. Согласитесь, это довольно неудобно. Если мы воспользовались предыдущем кейсом (применение функциональной опции в качестве обертки), то для «переезда» нам потребуется только зайти в свойства функциональной опции и изменить свойство «Хранение» . Например, указать там «Справочник» или «Регистр сведений» . Никаких игр с глобальным поиском не потребуется. Код обращения к значению константы через функциональную опцию останется прежним:

ПолучитьФункциональнуюОпцию("ВозможностьСохраненияДанных");

Функциональные опции – это одна из новых возможностей платформы 1С:Предприятие 8.2. Смысл их использования заключается в том, что они позволяют настраивать пользовательский интерфейс в соответствии с настройками функциональных опций, задавать видимость реквизитов в формах. Кроме того, разработчик имеет возможность реализовывать программный код, выполнение которого зависит от состояния функциональной опции.

Создадим функциональную опцию, которая позволяет включать и отключать ведение расчета заработной платы в конфигурации. С ее помощью мы сможем быстро скрывать те части интерфейса, которые относятся к решению расчетных задач. Функциональная опция сама по себе не хранит какого-либо значения, которое позволяет ее включать и отключать. Обычно для хранения состояния функциональной опции используют константу, хотя она может быть привязана и к другому объекту, например – к реквизиту какого-либо объекта.

Создадим новую константу, назовем ее УчетЗарплаты , тип – Булево . Включим константу в подсистему Администрирование и в форму констант для того, чтобы мы могли редактировать ее. Кроме того, в форме констант зададим обработчик ПослеЗаписи следующего вида:

&НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) ОбновитьИнтерфейс(); КонецПроцедуры

Смысл использования команды ОбновитьИнтерфейс() заключается в том, чтобы после вступления в силу изменения константы , связанной с функциональной опцией, обновить, перерисовать интерфейс . Иначе для того, чтобы изменения вступили в силу, придется перезапускать конфигурацию.

Создадим новую функциональную опцию, назовем ее УчетЗарплаты , на закладке Основные , в параметре Хранение укажем только что созданную константу, рис. 7.23 . Включим функциональную опцию в подсистему Администрирование .


Рис. 7.23.

Теперь перейдем на закладку окна настройки функциональной опции Состав и выберем все ( рис. 7.24), что относится к расчету заработной платы. Если какие-либо объекты, например, справочники, относятся к различным частям конфигурации, не будем их отмечать, иначе при выключении функциональной опции они "исчезнут" из интерфейса.


Рис. 7.24.

Выбор подсистемы РасчетЗаработнойПлаты в данном случае не ведет к автоматическому выбору всех объектов, включенных в подсистему. При выборе мы лишь подразумеваем скрытие или отображение раздела командного интерфейса РасчетЗаработнойПлаты .

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

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

Внесем изменения в конфигурацию, в частности, в справочник ФизическиеЛица добавим реквизит логического типа ИмеетОпытКадровойСлужбы и разместим его на форме элемента справочника.

Функциональные опции и Параметр функциональной опции — это объекты конфигурации 1С 8.3 (8.2), в совокупности представляющие из себя механизм функциональных опций. Механизм функциональных опций — функционал, позволяющий определить набор функционала, который необходим пользователям.

Проще говоря, механизм функциональных опций — это включатель/выключатель различного функционала в конфигурации.

Зачем может понадобиться отключать функционал?

Получите 267 видеоуроков по 1С бесплатно:

Зачастую дополнительный функционал может усложнять работу сотрудникам. Банальный пример использования функциональных опций в 1С — в базе ведется учет по одной организации или складу, зачем тогда обязывать пользователя заполнять эти данные во всех документах?

Чем управляют функциональные опции?

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