Все прекрасно знают, что такое функциональные опции (далее ФО). Все успешно с ними работают как в типовых конфигурациях, так и в собственных разработках. Так что я не буду описывать основное назначение данного функционала.
Но, как показывает практика, не все в курсе всех возможностей и вариантов применения данного механизма. Данная статья будет кратким практическим пособием по использованию ФО, с описанием всех возможностей механизма. Она будет интересна как начинающим разработчикам, так и более опытным. Некоторые возможности ФО используются достаточно редко, и неплохо всегда иметь под рукой пример использования.
И так, начнем.
ФО различаются по месту хранения значений:
Все реквизиты для хранения значений ФО обычно имеют тип «булево».
ФО с местом хранения – константа
Самый простой и наиболее распространенный способ использования механизма ФО. Собственно, необходимо создать новую константу с типом «булево», создать новую ФО, и выбрать в качестве места хранения созданную ранее константу:
На закладке «Состав», нужно выбрать все элементы, на видимость которых будет влиять данная ФО. Это могут быть отдельные объекты, реквизиты и табличные части объектов и команды:
Дополнительно ФО можно указать для различных реквизитов форм.
Также, есть возможность опционального выполнения каких-либо действий в зависимости от значения ФО. Для получения значения ФО, в данном случае, используется следующий метод:
ПолучитьФункциональнуюОпцию(<Имя ФО>);
При изменении значений ФО в константах, результат можно увидеть сразу же в текущем сеансе, после выполнения следующей команды:
ОбновитьИнтерфейс();
Теоретически, можно привязывать несколько ФО к одним и тем же объектам. Но нужно всегда помнить, что объект или реквизит будет доступен, если будет включена хотя бы одна из всех ФО, подключенных к нему. По этой причине, подключать к одним и тем же объектам или реквизитам несколько функциональных опций следует очень внимательно.
Для быстрого просмотра всех ФО, которые подключены к объекту, удобно использовать пункт контекстного меню «Дополнительно» в списке объектов конфигурации:
На заметку. По умолчанию, для новой ФО установлено свойство «Привилегированный режим при получении». По этому, можно использовать ФО для получения значений объектов на которые у пользователя отсутствуют права.
Параметризуемые ФО с местом хранения – реквизит справочника
Если с константами все просто и интуитивно понятно, данный режим использования является более сложным. В качестве места хранения значения ФО, в данном случае выбирается реквизит справочника с типом «булево».
Но каким образом система поймет, какой элемент справочника необходимо использовать для определения значения ФО?
Для этой цели существует дополнительный объект конфигурации «Параметры функциональных опций»:
В свойстве «Использование» должен быть указан справочник, в котором хранится значение ФО. Причем, система не позволяет выбрать для разных параметров ФО в качестве использования один и то же справочник. По этому, параметр ФО однозначно привязан к самой функциональной опции.
Дальше, необходимо установить этот параметр, чтобы система знала, какой элемент справочника нужно использовать. Установка параметров ФО может быть выполнена как для всего интерфейса, так и для каждой конкретной формы. Наиболее распространенным вариантом использования данного вида ФО, является управление элементами форм. Особенно, элементами панели навигации формы, так как другой возможности для программного управления видимостью элементов панели навигации нет.
Необходимо помнить один очень важный момент, если параметр функциональной опции не задан, система будет проверять все элементы справочника. Если хотя бы в одном элементе реквизит – значение ФО будет «Истина», объекты, привязанные к ФО будут доступны. Настройка такого плана достаточно часто применяется в типовых конфигурациях.
Пример управления видимостью команды «Договоры» в форме элемента справочника «Контрагенты»:
Необходимо создать ФО с местом хранения – реквизит справочника «Контрагенты.ИспользоватьДоговоры». В состав ФО включить справочник «Договоры». Также, необходимо создать параметр ФО «Контрагент» и установить для свойства «Использование» - справочник Контрагенты. Далее, в модуле формы в событии «ПриСозданииНаСервере», нужно присваивать значению параметра ФО ссылку на текущий объект:
УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("Контрагент", Ссылка));
Недостатком данного решения, является необходимость записи контрагента для управления видимостью команды «Договоры». Для решения этой проблемы, можно использовать для хранения значений функциональных опций отдельный справочник. В таком варианте, при изменении управляющего реквизита нет необходимости перезаписывать данные текущего справочника, и результат будет виден непосредственно после изменения. Дополнительным преимуществом такого варианта, будет использование одного параметра ФО «НастройкаФормы» для управления видимостью команд навигации произвольного количества объектов. Свойство параметра ФО «Использование», в данном случае, должно указывать на справочник с настройками:
В модуле формы в событии «ПриСозданииНаСервере» и при изменении реквизита «Использовать договоры» необходимо разместить программный код следующего вида:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПараметрыФО.Ссылка
|ИЗ
| Справочник. ПараметрыФО КАК ПараметрыФО
|ГДЕ
| ПараметрыФО. ИспользоватьДоговоры = & ИспользоватьДоговоры ";
Запрос.УстановитьПараметр("ИспользоватьДоговоры ", Объект. ИспользоватьДоговоры);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
ЭлементНастройки = ВыборкаДетальныеЗаписи.Ссылка;
Иначе
НовыйЭлементНастройки = Справочники. ПараметрыФО.СоздатьЭлемент();
НовыйЭлементНастройки. ИспользоватьДоговоры = Объект. ИспользоватьДоговоры;
НовыйЭлементНастройки.Записать();
ЭлементНастройки = НовыйЭлементНастройки.Ссылка;
КонецЕсли;
УстановитьПараметрыФункциональныхОпцийФормы Новый Структура("НастройкаФормы", ЭлементНастройки));
Похожий механизм применяется в типовых конфигурациях УТ 11, КА 2 и ЕРП 2.
Параметризуемые ФО с местом хранения – ресурс регистра сведений
Применение данного варианта параметризуемых ФО похоже на вариант с местом хранения – реквизит справочника. Отличием можно считать возможность использования нескольких параметров для отбора значения ФО. А также использование системного параметра ФО «Период» для отбора значения по дате в том случае, если для хранения значений ФО используется периодический регистр сведений:
Каждое измерение регистра сведений – это отдельный параметр ФО, который необходимо установить в форме. Дополнительно, можно установить параметр «Период», если требуется получить значение на определенную дату.
Данный функционал удобно использовать в формах документов, для управления видимостью элементов в зависимости от даты. Например, настроить видимость реквизитов или команд панели навигации в зависимости от данных учетной политики, действующей на дату документа:
Пример использования:
ПараметрыФО = Новый Структура;
ПараметрыФО.Вставить("Период", Объект.Дата);
ПараметрыФО.Вставить("Организация", Объект.Организация);
ПараметрыФО.Вставить("Склад", Объект.Склад);
УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФО);
Также, можно настроить опционально (в зависимости от даты документа) выполнение каких либо произвольных действий. Например дополнительные отборы при выборе значений реквизитов. Для этого нужно будет обращаться к значению ФО напрямую:
Если ПолучитьФукнциональнуюОпциюФормы(«ИспользоватьДополнительныйОтбор») Тогда
...
КонецЕсли;
Не стоит забывать, что существует возможность получения значений параметризуемой ФО вне контекста определенной формы, в любом месте программного кода:
ПараметрыФО = Новый Структура;
ПараметрыФО.Вставить("Период", Объект.Дата);
ПараметрыФО.Вставить("Организация", Объект.Организация);
ПараметрыФО.Вставить("Склад", Объект.Склад);
ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныйОтбор ", ПараметрыФО);
В качестве второго параметра, в данном случае, передается структура со значениями параметров ФО.
На заметку. Дополнительным вариантом использования ФО с местом хранения значений в регистре сведений, является доступ к значениям регистра без наличия у пользователя прав на данный регистр. В этом случае, ресурсы регистра могут иметь произвольный тип данных.
Использование параметризуемых ФО для настройки интерфейса
Как было описано выше, параметризуемые ФО в основном используются для настройки внешнего вида форм. Однако, их можно применять и для настройки всего интерфейса в целом. Например, можно управлять видимостью интерфейса в зависимости от текущего пользователя системы, или в зависимости от любого другого выбранного параметра (организации, склада, подразделения).
Допустим, в зависимости от организации, которая выбрана для пользователя основной, необходимо показывать в интерфейсе дополнительные команды. Для решения такой задачи, нужно добавить в справочник «Организации» новый реквизит «ВыводитьДопКоманды» с типом «булево». Создать новую ФО, указав в качестве места хранения созданный реквизит. В качестве состава ФО, выбрать необходимые команды или объекты (если нужно выводить стандартные команды). Создать новый параметр ФО с указанием в свойстве «Использование» - справочник Организации. Далее, необходимо при запуске системы, в модуле управляемого приложения, определять организацию, которая выбрана для текущего пользователя основной, и устанавливать параметр функциональных опций интерфейса:
ПараметрыФОИнтерфейса = Новый Структура;
ПараметрыФОИнтерфейса.Вставить("Организация", ОсновнаяОрганизацияПользователя);
УстановитьПараметрыФункциональныхОпцийИнтерфейса(ПараметрыФОИнтерфейса);
Вот и все, команды будут доступны, если включена соответствующая настройка для текущей организации пользователя.
При необходимости, можно получить значение параметра ФО, который задан для текущего сеанса:
ПараметрФООрганизация = ПолучитьПараметрыФункциональныхОпцийИнтерфейса().Организация;
На заметку. Если одни и те же параметры ФО используются для управления интерфейсом и для управления видимостью реквизитов форм, следует помнить, что параметры, установленные для интерфейса, по умолчанию передаются в управляемую форму.
На сего дня все, если информация показалась Вам интересной, добавляйте в избранное J
Другие мои статьи про механизмы платформы 1С
-
Работа с объектом «СообщениеПользователю», и другие варианты информирования пользователя.
-
Основные принципы работы с режимами автоматических и управляемых блокировок. Варианты контроля остатков. Разделение итогов.