1с функциональные опции. Функциональные опции, механизм (Functional Option, Mechanism)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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


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

Вывод

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

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

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

Функциональные опции - это объект метаданных, расположенный в группе "Общие":

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

Рассмотрим на примере:

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

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

Обновляемся, запускаем 1С Предприятие. Установим значение константы = Истина:

В результате имеем:

При установке константы = Ложь, получим:

У вас есть вопрос, нужна помощь консультанта?

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

Давайте теперь рассмотрим пример использования параметров функциональных опций.
Добавим новую функциональную опцию "Валютный учет "
Хранение: Справочник.Организация.Реквизит.ВалютныйУчет


Добавим в состав реквизит документа "Установка цен номенклатуры"- "Валюта"


В форме Документа в процедурах "ПриСозданииНаСервере" и " ОрганизацияПриИзменении"
Добавим следующий код:

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

Что же мы получаем в итоге? В результате использования параметров функциональной опции мы с вами получили параметрическое управление полем "Валюта" в документе "Установка цен номенклатуры". Т.е. для организации "Альфа" будет отображаться поле "Валюта", а для организации "Бета" - поле "Валюта" отображаться не будет.
Давайте в этом убедимся. Открываем документ и попытаемся изменить поле "Организация"
При установке Организации = "Альфа", валюта отображается; меняем на "Бета" - валюта убирается



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

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

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

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

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

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