Функциональные опции и параметры функциональных опций. Функциональные опции (1Cv82) 1с параметры функциональных опций

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для этого в конфигурации может быть определена функциональная опция Учет по складам , хранящаяся в константе типа Булево .

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

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

Платформа при этом будет автоматически включать и выключать отображение всех соответствующих элементов интерфейса (полей, команд, колонок списков, элементов отчетов). В нашем случае - будет скрываться или отображаться поле Склад во всех формах документа Поступление товара .

1. Права доступа.

На самом деле все очень просто. В 1С по умолчанию запрещено всё, что не разрешено . Есть только одна сущность, отвечающая за доступ пользователя к какой-либо функциональности или данным. Эта сущность называется "Право доступа" . Она является единственным элементом, отвечающим за доступ к конкретному режиму работы, справочнику, реквизиту....

Количество видов прав доступа предопределено платформой. Всего платформе есть две основные группы прав доступа. Общие для всей системы права доступа к механизмам платформы , отвечающие за доступ к определенным режимам работы платформы (Администрирование, Монопольный режим, Тонкий клиент,Интерактивное открытие внешних отчетов....). И объектные права доступа , позволяющие работать с различными объектами конфигурации. Их количество зависит от типа объекта конфигурации. Например, у справочника есть 16 различных видов доступа (Чтение, Добавление, Изменение, Удаление....). Для регистра сведений видов доступа всего пять. Все эти права можно установить только на уровне справочника целиком. Также можно ограничить доступ на уровне реквизитов. Но в этом случае доступна лишь часть видов прав (для справочников это права Просмотр и Редактирование).

Все права доступа связаны между собой и зависят друг от друга. Есть права более высокого и более низкого уровня. Нельзя дать право более низкого уровня, если у пользователя нет права на действия более высокого уровня.

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

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

2. Роли - механизм предоставления прав доступа

Рассмотрим, как именно выполняется предоставление пользователю прав доступа. Для удобства выдачи прав доступа в платформе 1С используется специальный механизм "Роли" . Он является прослойкой между пользователями информационной базы и правами доступа. В каждой роли объединен набор прав доступа, назначение которых имеет смысл выполнять только одновременно. Например, в роли "Чтение контактной информации" логично объединить наборы прав, отвечающих за связанные справочники с контактной информацией. Наиболее простым способом установки роли пользователю является открытие карточки пользователя ИБ в конфигураторе и установка галочек напротив нужных пользователю ролей . Это универсальный способ и он работает в любых конфигурациях. Однако, с усложнением конфигураций и увеличением количества ролей он стал довольно трудоемкий. Поэтому в актуальных типовых решениях есть дополнительная прослойка между пользователем ИБ и ролями. Эта прослойка реализована в виде подсистемы "Управления доступом" . Она позволяет объединять роли в более крупные сущности - "Профили" и назначать пользователю уже не отдельные роли, а профили, содержащие наборы из нескольких ролей.

Рассмотрим схему назначения пользователям прав доступа, используемую в большинстве типовых конфигураций. В упрощенном виде ее можно представить следующим образом. Вводятся новые сущности "Профиль доступа" и "Группа доступа" . В каждый профиль доступа включается несколько ролей. И каждому пользователю назначается одна или несколько групп доступа. Далее каждая группа доступа связывается с профилем доступа. В итоге мы получаем возможность указывать для пользователя не просто роли, а комплекты ролей в зависимости от выполняемых им функций.

С технической точки зрения данная система выдачи прав реализовывается с участием двух стандартных подсистем. Подсистема "Управление доступом" используется для настройки связи групп доступа с предопределенными в конфигурации ролями. Подсистема "Пользователи" используется для настройки связей пользователей ИБ с группами доступа конфигурации.

3. "Логика разрешений" как правило пересечения ролей.

Важно понимать, что в 1С общая логика управления доступом это логика разрешений . В платформе 1С вообще нет никаких механизмов запрета доступа . Есть только механизмы выдачи доступа . По умолчанию доступ ко всем данным запрещен, и настройка доступа заключается в выдаче каждому пользователю нужных ему прав . Это означает, что если какой-то ролью пользователю дано право на просмотр документов "Реализация товаров", то никакими способами нельзя это право отнять другими ролями или любыми другими механизмами платформы и конфигурации. Можно изначально выдать не полный доступ к справочнику, а отфильтровать с помощью RLS данные, на которые мы даем доступ. Но если доступ уже выдан, то забрать его другими ролями уже нельзя.

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

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

4. Косвенное управление доступом.

Есть отдельные механизмы, который хоть и не предназначены напрямую для управления доступом, косвенного на него влияют и могут использоваться для дополнительных ограничений. Рассмотрим их основные возможности.

4.1. Функциональные опции.

К системе управления доступом иногда относят механизм функциональных опций . Это не совсем верно, так как функциональные опции никак не влияют на доступ к данным. Это исключительно интерфейсный механизм, предназначенный для упрощения интерфейса для пользователя. Он появился в платформе 8.2 как результат усложнения функционала конфигураций. Функциональные опции предназначены для скрытия из интерфейса функционала, не используемого в данной конкретной компании или данным конкретным пользователем. Механизм влияет только на отображение данных. Из интерфейса исчезают команды, а на формах скрываются реквизиты, отключенные функциональными опциями. При этом у пользователя остается доступ ко всем этим командам и реквизитам . Он может без каких-либо проблем работать со скрытыми данными программно при помощи обработок.

Подробнее о работе с функциональными опциями можно почитать на ИТС

4.2. RLS (Record Level Security)

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

Для настройки такого разрешения есть дополнительный механизм RLS (Record Level Security) . Как и следует из названия, этот механизм контроля доступа на уровне конкретных записей таблиц. Если права доступа дают доступ к таблицам вцелом (справочникам) или колонкам таблиц (реквизитам), то RLS определяет конкретные строки таблиц (записи), с которыми разрешено работать пользователю. Он позволяет определить данные, которые пользователю доступны.

При разборе данного механизма стоит всегда помнить, что RLS не является механизмом запрета доступа . Он является механизмом фильтрации выдачи доступа . Т.е. RLS не влияет на имеющиеся у пользователя права, он является фильтром, ограничивающим выдачу прав. RLS влияет только на ту конкретную связь "Роль" - "Право доступа", в которой он прописан. И не влияет на права доступа, выданные с помощью других ролей. Например, если одной ролью будет разрешен доступ к документам только по Организации1, а другой ролью доступ к документам по Складу1, то в итоге пользователь получит доступ ко всем документам, в которых указана Организация1 ИЛИ Склад1. Поэтому если пользователю выдается несколько ролей, то фильтр с помощью RLS нужно ставить в каждой роли по обоим полям (по организации и складу). В типовых решениях эта задача обычна решается созданием одной роли, в которой прописываются все возможные фильтры RLS. Данная роль потом назначается всем пользователям, работающим с данными справочниками. Также контролируется, чтобы у пользователя не были доступны другие роли, содержащие право доступа к ограниченным документам.

Так же стоит обратить внимание что фильтры RLS можно наложить не на все возможные виды доступа к данным, а лишь на виды доступа верхнего уровня . Например, для справочников из имеющихся шестнадцати видов доступа фильтры RLS можно наложить лишь на четыре основных: Чтение, Изменение, Добавление и Удаление. Это означает, что мы не можем, например, дать пользователю одновременно право "Изменение" без фильтра для возможности работать программно с любыми документами и право "Редактирование" с фильтром RLS по организации для интерактивной работы. Если нам нужно, чтобы пользователь мог редактировать документы с фильтром RLS , мы обязаны наложить общий фильтр на верхнем уровне "Изменение" или "Чтение".

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

4.3. Разделение данных.

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

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

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

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

4.4. Программный код.

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

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

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

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

4.5. Сравнение вариантов.

Попробуем кратко сравнить рассмотренные варианты дополнительного ограничения данных.

Как включить

Что при этом произойдет

Функциональные опции - интерфейсный механизм скрытия функционала

1. Добавить место хранения функциональной опции: константа, реквизит справочника или ресурс регистра сведений.
2. Добавить в конфигурацию функциональную опцию и указать в ней созданное ранее место хранения.
3. Указать в свойствах функциональной опции ее состав, отметить все объекты конфигурации, которые будут от нее зависеть.
4. Включить использование функциональной опции в режиме предприятия.

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

RLS (Record Level Security) - дополнительные фильтры на разрешаемые роле права

1. Прописать фильтры RLS в каждой роле пользователя для каждого из прав, которые нужно ограничить.

Примечание: В режиме предприятия никаких действий выполнять не нужно. Фильтры применятся автоматически.

1. Настроенный фильтр будет добавляться к каждому запросу к ИБ.
2. Данные, не подходящие под фильтр RLS нельзя будет получить никакими средствами: они не будут отображаться в формах, отчетах; не будут отбираться никакими запросами.

Разделение данных - ведение в одной физической базе нескольких независимых

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

2. Добавит два параметра сеанса: для признака использования и текущего значения разделения данных.

3. Добавить программный код, обеспечивающий включение разделения данных и заполнения текущего значение разделителя.

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

  • Добавится поле "Разделитель", в котором будет храниться значение разделителя.
  • Перестроятся все индексы по таблицам. В них перевым полем добавится поле разделителя.

2. После включения разделения.

  • В абсолютно все запросы к ИБ будет добавляться фильтр по значению разделителя.
  • При записи любых данных будет автоматически заполняться значение разделителя по значению параметра сеанса.
Программный код - любые дополнительные точечные ограничения
1. Добавить код наложения нужных ограничений в конфигурацию.

1. Сделает именно то, что написано.

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

5. Итоги.

У каждого способа настройки ограничений свои плюсы и минуса. С точки зрения технологии наиболее правильный способ это грамотное разбиение на роли. Для фильтрации доступных данных надежнее всего использование RLS. Именно для этой задачи механизм предназначен. Точечные ограничения проще всего выполнять с помощью программного кода. Функциональные опции и разделение данных достаточно специфичные механизмы, не предназначенные для ограничения доступа. Хоть в некоторых случаях и могут для этого использоваться.

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

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

  • Функциональная опция
    C функциональными опциями, добавленными в прикладное решение, можно связать объекты конфигурации и их реквизиты. Например, с функциональной опцией Учет по складам можно связать реквизит Склад документа Поступление товара . Тогда, если в режиме 1С:Предприятие включить эту функциональную опцию, поле Склад будет отображаться во всех формах документа. Если выключить - поле Склад отображаться не будет. Подробнее...
  • Параметр функциональной опции
    Функциональные опции могут использоваться с параметрами. Например, для того, чтобы вид конкретной формы мог зависеть от значения параметра, выбранного в форме. Например, параметром функциональной опции Валютный учет может быть Организация . Тогда, в зависимости от того, какая организация выбрана в форме, поле Валюта взаиморасчетов будет скрыто или будет отображаться. Подробнее...

Назначение

Функциональные опции позволяют разработчику описать возможности конфигурации, которые можно оперативно включать или выключать на этапе внедрения и/или в процессе работы системы. Например, возможность работы с дополнительными свойствами товаров можно выделить в отдельную функциональную опцию. Тогда если отключить эту возможность, в интерфейсе конфигурации «пропадут» все связанные (с дополнительными свойствами товаров) возможности.

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

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

Функциональные опции могут оказывать влияние:

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

Глобальный командный интерфейс

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

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

Форма

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

От видимости реквизитов формы зависит видимость полей и таблиц управляемой формы, а видимость кнопок зависит от видимости команд.

Система компоновки данных

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

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

Общая схема работы

Механизм функциональных опций включает в себя два типа объектов метаданных: Функциональная опция и Параметр функциональных опций.

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

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

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

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

Для хранения значений функциональных опций создадим регистр сведений, где измерениями (осями координат) будут:

  • Организация (соответствующего типа);
  • Подразделение (соответствующего типа).

Ресурсом регистра сведений будет значение функциональной опции количественного учета.

Тогда общая структура конфигурации будет выглядеть следующим образом:

  • регистр сведений КоличественныйУчет:
    • Измерение Организация,
    • Измерение Подразделение,
    • Ресурс КоличественныйУчет, имеющий тип Булево.
  • параметр функциональных опций Организация. Свойство Использование указывает на измерение Организация регистра сведений КоличественныйУчет.
  • параметр функциональных опций Подразделение. Свойство Использование указывает на измерение Подразделение регистра сведений КоличественныйУчет.
  • функциональная опция КоличественныйУчет, свойство Хранение указывает на ресурс КоличественныйУчет регистра сведений КоличественныйУчет.

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

Взаимодействие с другими объектами

Функциональные опции могут быть назначены следующим объектам конфигурации:

  • Подсистемы,
  • Общие команды,
  • Константы,
  • Критерии отбора,
  • Справочник,
  • Документ,
  • Журнал,
  • План счетов,
  • План видов характеристик,
  • План видов расчета,
  • Бизнес-процесс,
  • Задача,
  • Планы обмена,
  • Отчет,
  • Обработка,
  • Регистр накопления,
  • Регистр сведений,
  • Регистр бухгалтерии,
  • Регистр расчета,
  • Команда,
  • Реквизит объекта метаданных,
  • Табличная часть,
  • Реквизит табличной части,
  • Признак учета,
  • Признак учета субконто,
  • Реквизиты адресации,
  • Измерение регистра,
  • Ресурс регистра.

Также функциональные опции могут влиять на видимость элементов формы.

Создание

Создание функциональной опции

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

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

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

  • константы,
  • реквизиты справочников,
  • ресурсы регистров сведений.

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

Создание параметра функциональных опций

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

Кроме имени, параметр имеет обязательное свойство Использование. В нем указывается набор объектов, значения которых будут определять то, как следует выбирать значение функциональной опции. В список доступных объектов входят справочники и измерения регистра сведений. Для каждого параметра функциональных опций в данном списке можно выбрать один справочник (из всего перечня справочников) и по одному измерению каждого регистра сведений.

Использование

Назначение объектам метаданных

Объект метаданных (например, справочник) можно отнести к одной или нескольким функциональным опциям. Для этого служит свойство Функциональные опции, которое содержит ссылки на созданные в конфигурации функциональные опции. Список доступных опций ограничен только теми опциями, для которых в свойстве Хранение назначен объект, тип значения которого является Булево.

Назначение реквизитам и командам формы

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

Сделать это можно в редакторе формы, установив свойство Функциональные опции для требуемого объекта.

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

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

Использование в механизме ограничения доступа к данным

В условиях механизма ограничения доступа к данным Функциональные опции могут использоваться точно так же, как и Параметры сеанса. Допустимо использовать только независящие от параметров опции, то есть те, которые привязаны к константам.

Определение значения функциональной опции

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

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

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

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

Управление значениями параметров функциональных опций

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

Работа с функциональными опциями во встроенном языке

Методы работы с функциональными опциями можно разделить на две части:

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

Работа со значениями функциональных опций

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

В управляемой форме есть свой метод, который возвращает значение опции для параметров, указанных в рамках формы, – ПолучитьФункциональнуюОпциюФормы().

Работа с параметрами функциональных опций

Методы работы с параметрами функциональных опций позволяют получать и устанавливать значения параметров функциональных опций для командного интерфейса или конкретной формы. Для установки значений параметров функциональных опций необходимо вызвать соответствующую функцию (УстановитьПараметрыФункциональныхОпцийИнтерфейса () или УстановитьПараметрыФункциональныхОпцийФормы ()), передав ей в качестве параметра структуру, ключ которой соответствует имени одного из параметров функциональных опций, а значение – значению параметра. Вызов вышеуказанных методов автоматически обновит соответствующую часть интерфейса.

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

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

 
Статьи по теме:
Лидеры и аутсайдеры Какие страны относятся к аутсайдерам
15-02-2010 13:18 Страны-аутсайдеры получили прозвище PIGS (свиньи) Появившаяся с легкой руки экономистов Goldman Sachs аббревиатура , объединяющая потенциальных экономических лидеров, стала обрастать клонами. Для потенциальных аутсайдеров - Португалии,
Комиссия по градостроительству, государственной собственности и землепользованию
1. Комиссия по землепользованию и застройке (далее - Комиссия) создается в целях подготовки Правил землепользования и застройки в соответствии с Градостроительным Земельным кодексами Российской Федерации, а также для решения следующих задач: Рассмотрение
Что такое сборные конструкции?
Унифицированные, заводского изготовления конструкции. Сборные конструкции в строительстве, конструкции, собираемые (монтируемые) из готовых элементов, не требующих дополнительной обработки (обрезки, подгонки и пр.) на месте строительства. Элементы сборны
Устойчивость и надежность банка
2.2 Анализ депозитных операций ПАО «Сбербанк России» Привлечение средств частных клиентов и обеспечение их сохранности остаются основой бизнеса ПАО «Сбербанк России» привлекает средства в срочные депозиты, вклады до востребования, включая банковские карты