На вкладке «Вычисляемые поля» пусто, в модуле объекта отчета смущают следующие строки:
#Область СлужебныеПроцедурыИФункции
Процедура НастроитьПараметрыОтборыПоФункциональнымОпциям(КомпоновщикНастроекФормы)
Если ПолучитьФункциональнуюОпцию(«ИспользоватьПартнеровКакКонтрагентов») Тогда
КомпоновкаДанныхСервер.УдалитьЭлементОтбораИзВсехНастроекОтчета(КомпоновщикНастроекФормы, «Контрагент»);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию(«ИспользоватьУпрощеннуюСхемуОплатыВПродажах») Тогда
КомпоновкаДанныхСервер.УдалитьВыбранноеПолеИзВсехНастроекОтчета(КомпоновщикНастроекФормы, «АвансДоОбеспечения»);
КонецЕсли;
КонецПроцедуры
Процедура НастроитьПользовательскиеНастройкиПоФункциональнымОпциям(КомпоновщикНастроекФормы)
Если ПолучитьФункциональнуюОпцию(«ИспользоватьУпрощеннуюСхемуОплатыВПродажах») Тогда
КомпоновкаДанныхСервер.ОтключитьВыбранноеПолеВПользовательскихНастройках(КомпоновщикНастроекФормы, «АвансДоОбеспечения»);
КонецЕсли;
КонецПроцедуры
1. Назначение функциональных опций
Функциональные опции позволяют разработчику описать возможности прикладного решения, которые можно оперативно включать или выключать на этапе внедрения и/или в процессе работы системы. Например, возможность работы с дополнительными свойствами товаров можно выделить в отдельную функциональную опцию. Тогда если отключить эту возможность, в интерфейсе прикладного решения «пропадут» все связанные (с дополнительными свойствами товаров) возможности.
Система способна автоматически учитывать состояние сделанных настроек – скрывать выключенные возможности, делая интерфейс приложения более ясным и понятным для пользователя.
При разработке возникают ситуации, когда значение функциональной опции должно зависеть от неких параметров, например, валютный учет ведется не у всех организаций. Для реализации такой зависимости служат Параметры функциональных опций – объекты, параметризующие функциональные опции.
2. На что влияют функциональные опции
2.1. Общая информация
Функциональные опции могут оказывать влияние:
● На пользовательский интерфейс – при выключении каких-либо функциональных опций система скрывает в пользовательском интерфейсе все элементы, относящиеся к ней. При этом затрагиваются следующие элементы интерфейса:
● глобальный командный интерфейс;
● реквизиты формы (в том числе колонки реквизита формы типа ТаблицаЗначений или ДеревоЗначений);
● команды формы;
● отчеты, реализованные с помощью системы компоновки данных.
ВНИМАНИЕ! Если клиентское приложение работает с файловым вариантом информационной базы через веб-сервер, то изменение функциональной опции приведет к изменению пользовательского интерфейса только после перезапуска веб-сервера (перезапуск клиентского приложения не вызовет изменение пользовательского интерфейса).
● На алгоритмы, написанные на встроенном языке – имеется возможность получать значения функциональных опций из встроенного языка и использовать их в различных условиях, например, для уменьшения объема вычислений.
ВНИМАНИЕ! Функциональные опции и их параметры не влияют на состав базы данных. Все таблицы и поля присутствуют в базе данных независимо от состояния функциональных опций.
2.2. Глобальный командный интерфейс
Влияние функциональных опций на глобальный командный интерфейс заключается в том, что система скрывает команды всех объектов, относящихся к выключенным опциям. Например, если значение функциональной опции Закупки равно значению Ложь, то будут скрыты команды открытия раздела Закупки, создания документа ПриходТовара, открытия списка ПриходТовара и т. д.
В свою очередь, опция Закупки может учитывать значение параметра функциональной опции, например, Организация. Изменяя с помощью методов встроенного языка значение этого параметра, можно изменять состояние функциональной опции, а, следовательно, и видимость элемента интерфейса.
Также следует учитывать следующие особенности формирования командного интерфейса:
● Команда будет исключена из командного интерфейса в том случае, если реквизит, являющийся параметром команды, отключен функциональной опцией.
● Команда будет исключена из командного интерфейса в том случае, если тип параметра команды отключен функциональной опцией. Если тип параметра команды составной, то команда становится недоступной тогда, когда отключаются все типы параметра.
2.3. Форма
В форме функциональные опции могут влиять на реквизиты и команды формы и (как следствие) изменять видимость связанных с ними элементов формы (поля и колонки – для реквизитов формы, кнопки – для команд формы). При разработке формы необходимо учитывать следующие особенности поведения системы:
● Основной реквизит управляемой формы типа <Вид>Объект (СправочникОбъект, ДокументОбъект и т. д.) будет отключен в том случае, если функциональной опцией отключен соответствующий объект конфигурации. Анализируются только те функциональные опции, которые не имеют параметров.
● Основной реквизит управляемой формы типа ДинамическийСписок будет отключен в том случае, если функциональной опцией отключен объект конфигурации, который указан в качестве основной таблицы динамического списка. Анализируются только те функциональные опции, которые не имеют параметров.
● Отключается реквизит формы ссылочного типа, если объект конфигурации, образующий этот тип, отключен функциональной опцией. Реквизит формы составного типа отключается в том случае, если функциональные опции отключают все составляющие типы.
● Отключается реквизит формы типа <Вид>Объект (включая основной реквизит формы), если объект конфигурации, образующий этот тип, отключен функциональной опцией. Анализируются только те функциональные опции, которые не имеют параметров.
● Таблица формы будет отключена, если она отображает данные реквизита формы, отключенного функциональной опцией.
● В диалоге выбора типов (например, для полей ввода, связанных с реквизитами составного типа) отсутствуют типы, если объекты конфигурации, формирующие эти типы, отключены функциональной опцией. Информация о типах, отключенных функциональными опциями, кешируется на стороне клиента и очищается через 20 минут или во время вызова метода ОбновитьИнтерфейс().
ВНИМАНИЕ! В отличие от командного интерфейса, значения параметров функциональных опций устанавливаются только для конкретного экземпляра формы.
2.4. Система компоновки данных
Система компоновки данных в основном используется для построения отчетов. Функциональные опции влияют на состав данных, которые выводятся в отчет, и на состав настроек отчета, доступных пользователю. Например, если выключена функциональная опция Валютный учет, то в отчете, выводящем реестр документов Приход товара, будет отсутствовать колонка Валюта и Валютная сумма, а в настройках будет отсутствовать возможность отбора, группировки, сортировки и т. д. по полю Валюта.
2.5. Характеристики
Функциональные опции оказывают влияние на видимость полей формы, которые отображают значение характеристики объекта. Для этого необходимо включить в состав функциональной опции реквизит, хранящий значение характеристики.
Рассмотрим пример. Характеристики используются для справочника Товары, виды характеристик хранятся в плане видов характеристик Характеристики, а значения – в качестве ресурса регистра сведений ЗначенияХарактеристик. Ресурс входит в состав функциональной опции УчетХарактеристик.
В случае отключения функциональной опции УчетХарактеристик в формах отключается видимость полей (колонка Значение и поле Значение), отображающих значения характеристик, как показано на рис1.
3. Общая схема работы
Механизм функциональных опций включает в себя два типа объектов метаданных: Функциональная опция и Параметры функциональных опций.
Функциональная опция представляет собой объект метаданных, который может непосредственно влиять на состав интерфейса приложения (если функциональная опция хранит свое значение в реквизите типа Булево). С помощью объектов этого типа можно скрыть элементы, которые относятся к недоступной функциональности. Например, опция Валютный учет может скрыть справочник Валюты, поле Валюта из документов, колонку Валютная сумма из отчетов. Источником значения функциональной опции является объект метаданных, выбранный в качестве свойства Хранение, например, это
может быть константа.
В случае хранения значения функциональной опции в реквизите справочника или ресурсе регистра сведений требуется дополнительная информация, которая указывает на то, как именно выбрать значение опции. Для этой цели предусмотрен отдельный объект метаданных – Параметры функциональных опций.
Можно сказать, что параметры функциональных опций являются осями координат пространства значений функциональных опций. Причем один параметр функциональных опций может определять значение «своей» оси координат одновременно для множества функциональных опций.
Рассмотрим пример: допустим, суммовой учет зависит от склада, принадлежащего конкретной организации (см. рис.98). В нашей информационной базе
можно вести учет от имени разных организаций и на разных складах.
Для хранения значений функциональных опций создадим регистр сведений, где измерениями (осями координат) будут:
● Организация (соответствующего типа);
● Склад (соответствующего типа).
Ресурсом регистра сведений будет значение функциональной опции суммового учета.
Тогда общая структура конфигурации будет выглядеть следующим образом:
● Регистр сведений СуммовойУчет:
● измерение Организация;
● измерение Склад;
● ресурс СуммовойУчет, имеющий тип Булево.
● Параметр функциональных опций Организация. Свойство Использование указывает на измерение Организация регистра сведений СуммовойУчет.
● Параметр функциональных опций Склад. Свойство Использование указывает на измерение Склад регистра сведений СуммовойУчет.
● Функциональная опция СуммовойУчет. Свойство Хранение указывает на ресурс СуммовойУчет регистра сведений СуммовойУчет.
В результате для того, чтобы определить необходимость ведения суммового учета, нам необходимо в каждом конкретном случае указать значения параметров функциональных опций (Организация и Склад) и получить значение функциональной опции.
Так, в примере, показанном на рис.2, для Организации 1 и Склада 1 суммовой учет разрешен, а для Организации 2 и Склада 1 суммовой учет запрещен.
4. Взаимодействие с другими объектами
Функциональные опции могут быть назначены следующим объектам конфигурации:
● Подсистемы,
● Общие команды,
● Общие формы,
● Константы,
● Критерии отбора,
● Справочник,
● Документ,
● Журнал,
● План счетов,
● План видов характеристик,
● План видов расчета,
● Бизнес-процесс,
● Задача,
● Планы обмена,
● Отчет,
● Обработка,
● Регистр накопления,
● Регистр сведений,
● Регистр бухгалтерии,
● Регистр расчета,
● Команда,
● Реквизит объекта метаданных,
● Табличная часть,
● Реквизит табличной части,
● Признак учета,
● Признак учета субконто,
● Реквизиты адресации,
● Измерение регистра,
● Ресурс регистра.
Также функциональные опции могут влиять на видимость элементов формы.
5. Создание
5.1. Создание функциональной опции
Для того чтобы создать функциональную опцию, необходимо создать объект конфигурации Функциональная опция. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Функциональные опции и добавить новый объект.
В результате будет создан объект конфигурации Функциональная опция, который можно использовать для назначения функциональных опций другим объектам метаданных.
Кроме имени объект имеет обязательное для заполнения свойство – Хранение. В редакторе для него можно выбрать один из объектов, который будет являться источником значения опции. В список доступных объектов входят:
● константы,
● реквизиты справочников,
● ресурсы регистров сведений.
Ограничение на тип источника значения опции нет, но для управления интерфейсом пригодны только те функциональные опции, которые хранят свои значения в реквизитах, имеющих тип Булево. Значения функциональных опций с другими типами доступны только для анализа на встроенном языке.
Свойство Привилегированный режим при получении отвечает за способ получения (и кеширования) значения функциональной опции.
Если данное свойство установлено, то значение функциональной опции получается в привилегированном режиме. Полученное значение кешируется для всех сеансов, связанных с данной информационной базой.
Если свойство Привилегированный режим при получении сброшено, то получение значения функциональной опции выполняется в обычном режиме.
Кеширование выполняется для текущего сеанса. Кешируется как значение (если его удалось получить), так и признак невозможности получения значения (в том случае, если значение получить не удалось).
Кеш сбрасывается при изменении значений параметров сеанса.
СОВЕТ. Рекомендуется устанавливать свойство Привилегированный режим при получении для всех случаев, когда значение функциональной опции не содержит конфиденциальную информацию.
5.2. Создание параметра функциональных опций
Для того чтобы создать параметр функциональной опции, необходимо создать объект конфигурации Параметры функциональных опций. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Параметры функциональных опций и добавить новый объект.
Кроме имени, параметр имеет обязательное свойство Использование. В нем указывается набор объектов, значения которых будут определять то, как следует выбирать значение функциональной опции. В список доступных объектов входят справочники и измерения регистра сведений. Для каждого параметра функциональных опций в данном списке можно выбрать один справочник (из всего перечня справочников) и по одному измерению каждого регистра сведений.
ВНИМАНИЕ! Нельзя использовать один и тот же объект метаданных в нескольких параметрах функциональных опций.
6. Использование
6.1 Назначение объектам метаданных
Объект метаданных (например, справочник) можно отнести к одной или нескольким функциональным опциям. Для этого служит свойство Функциональные опции, которое содержит ссылки на созданные в конфигурации функциональные опции.
Список доступных опций ограничен только теми опциями, для которых в свойстве Хранение назначен объект с типом значения Булево.
ВНИМАНИЕ! Если объекту не назначена ни одна функциональная опция, то он считается видимым всегда. В противном случае объект считается видимым, если хотя бы одна из назначенных ему функциональных опций является включенной (т. е. функциональные опции сочетаются «по ИЛИ»).
6.2. Назначение реквизитам и командам формы
Объекты, принадлежащие форме (Реквизиты и Команды), также можно задействовать в механизме функциональных опций.
Сделать это можно в редакторе формы, установив свойство Функциональные опции для требуемого объекта.
Состояние функциональных опций будет влиять на отображение объектов формы точно так же, как это происходит в случае объектов метаданных.
Например, в случае с командой, отключенной с помощью функциональной опции, будут убраны все связанные с ней кнопки.
Если реквизиту формы или команде не назначена ни одна функциональная опция, то реквизит формы или команда считается видимой всегда. В противном случае реквизит формы или команда считается видимой, если хотя бы одна из назначенных ему функциональных опций является включенной.
6.3. Использование в механизме ограничения доступа к данным
В условиях механизма ограничения доступа к данным Функциональные опции могут использоваться точно так же, как и Параметры сеанса . Допустимо использовать только не зависящие от параметров опции, то есть те, которые привязаны к константам.
ВНИМАНИЕ! Системой контролируется уникальность имен между параметрами сеанса и функциональными опциями.
6.4. Определение значения функциональной опции
Значение функциональной опции определяется объектом, который указан в свойстве Хранение. В случае константы используется ее значение. Для опции, связанной с реквизитом справочника или ресурсом регистра сведений, – значения, хранящиеся в этих объектах. Для того чтобы найти конкретный объект, который хранит значение функциональной опции, необходима дополнительная информация – набор значений параметров функциональных опций.
Если опция хранится в реквизите справочника, параметр должен содержать ссылку на конкретный элемент справочника. Если опция хранится в ресурсе регистра сведений, должны быть указаны значения всех измерений регистра. В этом случае каждое измерение должно характеризоваться своим параметром.
Если для функциональной опции, имеющей тип Булево, заданы не все параметры, то выполняется сложение «по ИЛИ» всех значений с не заданными параметрами. Например, если функциональная опция хранится в регистре сведений с измерениями Организация и Склад и задано только измерение Организация, то значение функциональной опции будет равно Истина, если хотя бы у одного из складов, перечисленных в измерении Склад, значение функциональной опции будет равно значению Истина.
Для функциональной опции, имеющий тип, отличный от Булево, ситуация с не полностью заданными параметрами приводит к генерации исключения.
Методы встроенного языка позволяют получить значение опции, как в зависимости от переданных параметров, так и для параметров, установленных
для командного интерфейса или конкретной формы. В том случае, когда изменение значения объекта, указанного в свойстве функциональной опции Хранение, выполняется в транзакции, собственно значение функциональной опции будет изменено только после завершения транзакции. Пока открыта транзакция – значение функциональной опции будет равно значению, актуальному на момент начала транзакции.
Если функциональная опция привязана к ресурсу периодического регистра сведений, то система использует срез последних для получения значения опции. Если требуется получать значение опции на какую-либо другую дату, необходимо указать значение для параметра функциональных опций Период (Period), имеющий тип Дата, который будет использоваться как дата получения среза. Этот параметр не нужно создавать в метаданных. Он предоставляется системой автоматически.
При использовании параметризованных функциональных опций следует учитывать следующие особенности поведения:
● В формах списков колонка реквизита, связанного с параметризованной функциональной опцией, будет отображаться, если в информационной базе хранится хотя бы одно включенное значение данной функциональной опции.
● Если необходимо, чтобы при открытии формы реквизиты, связанные с функциональными опциями, были отключены по умолчанию, то нужно
установить значения этих параметров в значения, отсутствующие в информационной базе (для справочников – пустая ссылка, для регистров сведений – значения измерений, для которых нет записей). В этом случае функциональная опция будет иметь значение Ложь.
● В том случае, когда в качестве параметра указана ссылка на группу (если типа параметра функциональной опции допускает создание групп), а не ссылка на элемент, поведение системы будет следующим:
● если реквизит, в котором хранится значение функциональной опции, используется как для элемента, так и для группы, то значение функциональной опции будет определяться значением этого реквизита.
● если реквизит, в котором хранится значение функциональной опции, не используется для группы, то при получении значения функциональной опции c помощью методов ПолучитьФункциональнуюОпцию(), ПолучитьФункциональнуюОпциюФормы() и ПолучитьФункциональнуюОпциюИнтерфейса() будет возращено значение NULL. Если, параметризованная таким значением, функциональная опция оказывает влияние на пользовательский интерфейс, то система будет воспринимать ее как выключенную (функциональная опция будет иметь значение Ложь).
● Для командообразующих объектов метаданных возможно установить привязку к параметризованной функциональной опции. В командном интерфейсе команды таких объектов будут отображаться только в том случае, если есть хотя бы одна комбинация параметров функциональных опций, при которых значение функциональной опции равно Истина. Однако с помощью метода УстановитьПараметрыФункциональныхОпцийИнтерфейса() можно задать конкретные значения параметров функциональных опций, и тогда видимость
команд будет определяться именно заданными параметрами.
● Динамический список автоматически использует функциональные опции, используемые формой. Если реквизиты, которые используются в запросе динамического списка, будут отключены при заданной комбинации параметров функциональных опций, данные по ним не будут выбраны и отображены в динамическом списке, а реквизит будет удален из списков доступных реквизитов в диалоге настройки отображения данных
динамического списка (в режиме 1С:Предприятие).
7. Работа с функциональными опциями во встроенном языке
Методы глобального контекста ПолучитьФункциональнуюОпцию() и ПолучитьФункциональнуюОпциюИнтерфейса() возвращают значение функциональной
опции. Разница между ними заключается в том, что первый метод позволяет указать набор параметров функциональных опций, а второй – возвращает значение функциональной опции исходя из параметров, заданных для командного интерфейса. В форме есть свой метод, который возвращает значение опции для параметров, указанных в рамках формы, – ПолучитьФункциональнуюОпциюФормы().
Для обновления глобального командного интерфейса следует явным образом вызывать метод УстановитьПараметрыФункциональныхОпцийИнтерфейса().
Командный интерфейс будет обновлен с учетом нового состояния функциональных опций.
ПРИМЕЧАНИЕ. Если значение функциональной опции изменяется в базе данных, то автоматического обновления глобального командного интерфейса и открытых в это время форм не происходит. Для этого следует использовать метод ОбновитьИнтерфейс() после записи значений функциональных опций в базу данных.
Следует помнить, что установка параметров функциональных опций (и выполнение метода ОбновитьИнтерфейс()) приводит к следующим последствиям:
● для каждой формы вызывается закрытие всех вспомогательных форм (с вызовом соответствующих обработчиков);
● формы, отказавшиеся от закрытия, не закрываются;
● происходит обновление состава элементов основной формы;
● если на момент обновления интерфейса активной формой была основная, происходит отображение основной формы в соответствии с новым составом элементов;
● если на момент обновления интерфейса активной формой была вспомогательная форма, то:
● будет выполнена команда открытия вспомогательной формы, если после обновления интерфейса она является доступной;
● в противном случае обновляется состав элементов основной формы и выполняется ее отображение;
● если на момент обновления интерфейса активной формой была вспомогательная форма, открытая с помощью команды, не относящейся к панели навигации формы, то вместо этой формы будет обновлен состав элементов основной формы и выполнено ее отображение.
Для того чтобы обновить конкретную форму, следует либо заново открыть ее, либо вызвать метод УстановитьПараметрыФункциональныхОпцийФормы(),
при этом вышеописанная последовательность действий отрабатывает только для той формы, в контексте которой вызвана установка параметров функциональных опций формы.
Параметры не обязательно указывать все сразу, можно изменить значение конкретного параметра или набора параметров выборочно. Но эффективнее осуществляется именно групповая установка значений одним вызовом.
Для получения значений параметров необходимо вызвать соответствующую функцию (ПолучитьПараметрыФункциональныхОпцийИнтерфейса() или
ПолучитьПараметрыФункциональныхОпцийФормы()), которая вернет установленные параметры в виде структуры, где ключом будет выступать имя параметра.
При открытии форма автоматически использует параметры функциональных опций, установленных для командного интерфейса.
Что такое функциональные опции (далее ФО) и как с ними работать, необходимо знать каждому кто начинает заниматься разработкой на платформе 1С Предприятие 8. Конечно, можно и нужно читать официальную документацию, но для понимания новичками она бывает довольно сложна. В этой статье рассмотрим понятие ФО и принципы работы с этим объектом конфигурации. Приступим…
Что же такое функциональные опции?
Функциональные опции (ФО) – это объекты конфигурации, которые предназначены для включения и выключения различной функциональности в интерфейсе пользователя за счет отображения или сокрытия элементов включенных в состав ФО. Если коротко то ФО –выключатель видимости элементов на форме.
Для чего это может быть необходимо?
Функционал (типового) прикладного решения производится для решения обширного спектра задач для работы с различными разделами, разрезами учета, который здорово нагрузит интерфейс различными элементами и может оказаться чрезмерно большим громоздким и не бесполезным в рамках отдельного предприятия. ФО дают возможность настроить интерфейс пользователя сделав его более ясным, простым и понятным – оставив только нужные документы, реквизиты, логику и отключив все ненужное. Например: Наличие ФО «Многофирменный учет»
позволит вести учет разных предприятий, но во всех документах и отчетах станет видимым реквизит для выбора предприятия, который совсем не нужен для тех кто не ведет многофирменный учет, поэтому при выключении ФО реквизит будет просто скрыт из интерфейса.
На что влияют ФО ?
ФО могут оказывать влияние:
- На пользовательский интерфейс – при выключении каких либо ФО система скрывает в польззовательском интерфейсе все элементы которые к ней относятся, затрагивая следующие элементы интерфейса:
- Глобальный командный интерфейс
- Реквизиты формы (в т.ч. колонки реквизита формы типа ТаблицаЗначений или ДеревоЗначений);
- Команды формы
- Отчеты реализованные с помощью системы СКД.
- На алгоритмы написанные на встроенном языке – имеется возможность програмно получать значения ФО и использовать их в различных условиях, например для уменьшения объема вычислений.
ВНИМАНИЕ!
ФО не влияют на состав базы данных. Все таблицы и поля присутствуют в базе данных не зависимо от состояния значений ФО.
Как управлять функциональной опцией?
Выше уже было сказано, что включение / выключение видимости объектов добавленных в состав ФО зависит от логического значения, которое храниться в одном из трех видах объектов конфигурации (Константа, реквизит справочника, ресурс регистра сведений) и иметь Булевский тип.
Значение Истина – включенный объект в состав ФО отображается в интерфейсе программы. Ложь – включенный объект в состав ФО НЕ отображается в интерфейсе программы.

Какие свойства имеются у объекта функциональная опция?
- Хранение — поле в котором выбирается объект (Константа, Реквизит справочника, Ресурс регистра сведений) булевского типа.
- Привилегированный режим при получении — флаг отвечает за возможность получения значения функциональной опции в привилегированном режиме.
- Состав — список объектов и реквизитов объектов, видимостью которых можно будет управлять с помощью функциональной опции.
Рассмотрев объект конфигурации ФО, мы плавно подошли еще к одному объекту конфигурации — Параметры Функциональных Опций (далее ПФО), который неразрывно связан с механизмом работы ФО и для полноты понимания работы ФО и дальнейшей возможности рассмотрения примеров, рассмотрим этот объект прямо сейчас в этой же статье.
Что такое и для чего нужны ПФО ?
Параметры Функциональных Опций (ПФО) – хоть и представлены в дереве метаданных отдельным объектом, обособленно от ФО использоваться не могут и предназначены они для сообщения ФО – из какого элемента справочника или измерения регистра сведений брать значение для получения значения ФО.
У объекта ПФО есть только одно интересующее нас свойство:
Использование, которое предназначено для указания ФО в каком справочнике или ресурсе регистра сведений будут хранится элементы или записи для получения значения ФО.
На словах не совсем понятно, поэтому рассмотрим примеры работы с хранением значения ФО во всех доступных объектах.
Для экспериментов создадим ФО ВалютныйУчет и добавим в состав ФО справочник Валюты для организации возможности выбирать валюту в договорах с клиентами.
Значение ФО хранится в константе
Это самый простой способ управления функциональной опцией и его можно применить для создания возможности управления глобальными настройками прикладного решения, например – для включения или отключения валютного учета, учета партий, учета НДС, возможности включения многофирменного и многоскладского учета и т.д.
Для использования значения хранящегося в константе не нужно писать никакого кода, достаточно просто создать константу Булевского типа и указать ее в качестве значения хранения.


Пример использования константы:
Значение ФО хранится в реквизите справочника
Данный вариант реализации в отличие от хранения значения в константе имеет ряд особенностей. Если просто выбрать в свойстве Хранение реквизит справочника Булевского типа, то такое решение будет работать не корректно. После установки у элемента справочника флажка в состояние Истина (видимость включена) и перезаписи элемента справочника, скрытый элемент диалога отобразится у элемента справочника при повторном открытии. Не корректность заключается в том, что включив видимость хотя-бы у одно элемента из всего справочника, скрытый элемент диалога отобразится у всех остальных элементов, даже у тех у кого реквизит хранящий значение ФО установлен в состояние Ложь (видимость выключена).



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

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

Изменим значение хранение ФО на ресурс регистра сведений.

Создадим два объекта ПФО «Организация» и «Склад» и укажем, откуда брать значения для параметров.


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

Меняем склад на другой.
Как предполагалось –элемент формы «Валюта» просто исчез с формы.
В этой статье мы познакомились с механизмом ФО и рассмотрели базовые приемы работы с объектами конфигурации ФО и ПФО.
Благодарю за внимание.
Функция не найдена «ПолучитьФункциональнуюОпцию» |
Я |
PbI4
31.05.16 — 10:52
1С:ERP Управление предприятием, редакция 2.0 + CRM, редакция 2.0 (2.0.10/2.0.8)
Доработал стандартный отчет СостояниеРасчетвоСКлиентами, с полными правами формируется без ошибок, менеджерам дал права на отчет и команды в нём.
В результате в журнале такое:
{ОбщийМодуль.ВариантыОтчетов.Модуль(1302)}: Ошибка при вызове метода контекста (СкомпоноватьРезультат)
по причине:
по причине:
Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика — ‘ПриКомпоновкеРезультата’
по причине:
{Отчет.СостояниеРасчетовСКлиентами.МодульОбъекта(89)}: Ошибка при вызове метода контекста (Инициализировать)
по причине:
Ошибка компоновки данных
по причине:
Ошибка инициализации
по причине:
Функция не найдена «ПолучитьФункциональнуюопцию»
Nuobu
1 — 31.05.16 — 10:55
Посмотри на вкладке «Вычисляемые поля»
ИсчадиеADO
2 — 31.05.16 — 10:57
а где хранится значение функ опции?
PbI4
3 — 31.05.16 — 11:02
На вкладке «Вычисляемые поля» пусто, в модуле объекта отчета смущают следующие строки:
#Область СлужебныеПроцедурыИФункции
Процедура НастроитьПараметрыОтборыПоФункциональнымОпциям(КомпоновщикНастроекФормы)
Если ПолучитьФункциональнуюОпцию(«ИспользоватьПартнеровКакКонтрагентов») Тогда
КомпоновкаДанныхСервер.УдалитьЭлементОтбораИзВсехНастроекОтчета(КомпоновщикНастроекФормы, «Контрагент»);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию(«ИспользоватьУпрощеннуюСхемуОплатыВПродажах») Тогда
КомпоновкаДанныхСервер.УдалитьВыбранноеПолеИзВсехНастроекОтчета(КомпоновщикНастроекФормы, «АвансДоОбеспечения»);
КонецЕсли;
КонецПроцедуры
Процедура НастроитьПользовательскиеНастройкиПоФункциональнымОпциям(КомпоновщикНастроекФормы)
Если ПолучитьФункциональнуюОпцию(«ИспользоватьУпрощеннуюСхемуОплатыВПродажах») Тогда
КомпоновкаДанныхСервер.ОтключитьВыбранноеПолеВПользовательскихНастройках(КомпоновщикНастроекФормы, «АвансДоОбеспечения»);
КонецЕсли;
КонецПроцедуры
PbI4
4 — 31.05.16 — 11:03
с Функциональными опциями не сталкивался никогда
ИсчадиеADO
5 — 31.05.16 — 11:06
(4) пофигурация — ветка обсчие — функциональные опции — открываешь нужную. там будет св-во Хранение. На это дело права есть? Хотя текст ошибки странный конеш…
Nuobu
6 — 31.05.16 — 11:09
А есть ф-я ПолучитьФункциональнуюОпцию(«ИспользоватьПартнеровКакКонтрагентов»)
PbI4
7 — 31.05.16 — 11:11
Nuobu
8 — 31.05.16 — 11:11
(7) Тебе нужная ф-я «ПолучитьФункциональнуОпцию» ищи её.
ИсчадиеADO
9 — 31.05.16 — 11:14
Глобальный контекст (Global context)
ПолучитьФункциональнуюОпцию (GetFunctionalOption)
Синтаксис:
ПолучитьФункциональнуюОпцию(<Имя>, <Параметры>)
Параметры:
PbI4
10 — 31.05.16 — 11:20
У константы, хранящейся в функциональной опции стоит только чтение, давать изменение/просмотр/редактирование?
PbI4
11 — 31.05.16 — 11:20
Копать надо думаю в права, так как с полными отчёт формируется без ошибок
ИсчадиеADO
12 — 31.05.16 — 11:21
(10) нет
Cyberhawk
13 — 31.05.16 — 11:40
Функция недоступна на клиенте, в этом твоя беда
PbI4
14 — 31.05.16 — 12:15
И как же избавиться от такой напасти?
PbI4
15 — 31.05.16 — 12:16
С полными правами она значит доступна на клиенте?
hhhh
16 — 31.05.16 — 12:21
(15) а святой водой не пробовали на сервер побрызгать?
PbI4
17 — 31.05.16 — 12:28
не, не достану, он в Германии
PbI4
18 — 31.05.16 — 13:32
Ну что, найдем функцию? В УТ 11 такой же отчёт есть, может есть столкнувшиеся с такой засадой ещё?
Содержание:
1. Типы хранения Функциональных опций в 1С
2. Тип хранения константа 1С 8.3
3. Тип хранения Реквизит справочника 1С 8.3
4. Тип хранения Ресурс регистра сведений
Все вы знаете, что такое функциональные опции, и часто их используете. Особенно они распространены в управляемых формах конфигураций.
Кто не знает, что такое функциональная опция, то скажу так: функциональная опция – это инструмент настройки интерфейса и функционала 1С:Предприятия в зависимости от установленных настроек базы. Все ясно и логически понятно.
1. Типы хранения Функциональных опций в 1С
Итак, существует три вида этого инструмента, а точнее три места, где оно хранится:
1. Константа;
2. Реквизит справочника;
3. Ресурс регистра сведений.
Все эти виды должны быть с типом «Булево».
Чаще всего выбирают тип хранения константы. Проще всего использовать именно их. Все типовые функциональные опции, особенно самые важные для работы, выводятся во вкладку «Общие настройки» на вкладке «Администрирование». Для разных конфигураций эта вкладка может называться по-разному и находиться, к примеру, не во вкладке «Общие настройки», а во вкладке «НСИ».Разберем на примерах каждый из типов хранения значений опций.
2. Тип хранения константа 1С 8.3
Первый тип хранения константа. Это самый простой и логический вариант для настройки функционала 1С. Для этого нам всего лишь необходимо будет создать константу и, конечно же, функциональную опцию, где в качестве места мы выбираем нашу константу.
Хочу повториться, константа должна быть булевского типа – и никак иначе. При необходимости мы можем вывести нашу константу на какую-то форму для ее удобного использования.
На вкладке «Состав» опции мы настраиваем доступ к отдельным объектам, к которым мы можем ограничить доступ нашим инструментом.
3. Тип хранения Реквизит справочника 1С 8.3
Итак, второе место хранения – это реквизит справочника 1С 8.3. В этом случае тоже должен быть реквизит булевского типа. К примеру, при настройке организации есть флажок «Ввести учет в нескольких валютах». Если флажок не установлен, то выбирается валюта регламентного учета, а на формах, где выведена валюта, это поле не активно. А вот если он установлен, то сразу после установки нам становится доступным выбор нескольких валют (в таких объектах как справочники и документы).
4. Тип хранения Ресурс регистра сведений
И пришло время для последнего места хранения – ресурс регистра сведений. В нем все так же, как и во втором варианте. Единственное различие в том, что можно установить период, за который используется опция. А также к ресурсам одного регистра можно привязать несколько этих инструментов для удобства настройки интерфейса и функционала программы.
Существует еще один важный момент в опциях. Если у пользователя нет прав на какой-то объект, но установлена функциональная опция, то она открывает доступ к этому объекту.
И позвольте сказать, что это лишь малая часть того, что мы можем настроить в системе благодаря чудесному инструменту и объекту конфигурации «Функциональные опции».
Специалист компании ООО «Кодерлайн»
Мороз Олег.
Фирма “1С” достаточно часто выпускает новые версии платформы. Среди них можно выделить версии-”прорывы” с принципиально новым функционалом. К таким можно отнести, например, платформу 8.3.11, в которой появилась возможность изменять структуру хранения данных при помощи расширений конфигурации.
А могут быть версии платформы не настолько революционные, но в которых появился полезный, ожидаемый функционал и в которых разработчики продолжают планомерное развитие механизмов платформы. И 8.3.16 как раз относится к таким релизам.
В курс Разработка расширений и технологии доработки конфигураций 1С без снятия с поддержки добавлено новое занятие, в котором подробно рассмотрены новшества платформы 8.3.16.
Мы решили поделиться этими видеоуроками не только со слушателями курса, но и со всеми нашими подписчиками
Обзор новых возможностей платформы
Общая длительность всех видеоуроков – 1 час 6 минут.
Для того, чтобы Вам было проще ориентироваться в материале, мы указали тайминг наиболее важных моментов в видео.
Видео 1 – Введение
Видео 2 – Создание новых констант в расширении конфигурации
01:22 – Как создать константу в расширении
02:44 – Как создать форму констант в расширении
05:22 – Как работать с основной формой константы
05:47 – На что влияет галочка Использовать стандартные команды в свойствах константы.
Видео 3 – Назначение функциональных опций в расширениях конфигурации
00:30 – Зачем вообще нужны функциональные опции
03:29 – На что влияют и на что не влияют функциональные опции.
Видео 4 – Создание новых функциональных опций в расширении конфигурации
01:13 – Как создается функциональная опция в расширении
01:30 – Где указывается объект, предназначенный для хранения значения функциональной опции
02:16 – Какие объекты можно включать в состав функциональной опции в расширении
05:55 – Как обновить интерфейс при изменении значения функциональной опции
07:20 – Как в типовой конфигурации УТ 11 реализована работа с константами и обновление интерфейса при изменении значения функциональной опции
09:58 – Как реализовать собственную простую обработку для настройки функционала конфигурации
13:08 – Можно ли для хранения значения функциональной опции использовать константу, заимствованную из основной конфигурации.
Видео 5 – Модификация заимствованных функциональных опций
01:03 – Можно ли при помощи расширения изменить объект конфигурации, предназначенный для хранения значения функциональной опции?
02:03 – Как изменить состав заимствованной функциональной опции?
04:58 – Можно ли при помощи расширения удалить объекты из состава заимствованной функциональной опции?
Видео 6 – Создание новых параметров функциональных опций
00:33 – В каких случаях на практике используются параметры функциональных опций
06:59 – Как создать в расширении параметр функциональных опций и какие объекты к этому времени должны существовать в расширении
07:30 – Какие обработчики событий нужно реализовать для работы с параметрами функциональных опций в формах объектов
10:32 – При каких настройках функциональных опций в расширении конфигурации платформа падает.
Видео 7 – Создание новых критериев отбора
00:12 – Для чего используются критерии отбора
03:10 – Можно ли при помощи расширения изменить тип критерия отбора
04:00 – Можно ли при помощи расширения добавить в состав критерия отбора заимствованный объект
05:20 – Можно ли при помощи расширения добавить в состав критерия отбора объект, созданный в этом же расширении
05:55 – Как в пользовательском режиме проверить работоспособность критерия отбора, модифицированного при помощи расширения конфигурации
07:35 – Как создать новый критерий отбора в расширении
08:34 – Как в панели навигации формы создать ссылку для перехода к критерию отбора
09:24 – Какие ошибки возникают в пользовательском режиме при использовании критерия отбора, созданного в расширении конфигурации.
Видео 8 – Изменения в редакторе управляемой формы для расширений конфигурации
00:34 – Какие свойства в панели свойств выделяются цветом
01:28 – Как работает команда “Показывать только измененные” в панели свойств
01:53 – Как в дереве элементов формы отобразить только те элементы, которые изменены в расширении
Хотите научиться грамотно дорабатывать конфигурации при помощи расширений?
Еще больше возможностей по доработке и обновлению типовых конфигураций без снятия с поддержки – в нашем учебном курсе Разработка расширений и технологии доработки конфигураций 1С без снятия с поддержки.
Примеры использования функциональных опций для управления интерфейсом и элементами управляемых форм, с различными вариантами хранения значений: константа, реквизит справочника, ресурс регистра сведений.
Все прекрасно знают, что такое функциональные опции (далее ФО). Все успешно с ними работают как в типовых конфигурациях, так и в собственных разработках. Так что я не буду описывать основное назначение данного функционала.
Но, как показывает практика, не все в курсе всех возможностей и вариантов применения данного механизма. Данная статья будет кратким практическим пособием по использованию ФО, с описанием всех возможностей механизма. Она будет интересна как начинающим разработчикам, так и более опытным. Некоторые возможности ФО используются достаточно редко, и неплохо всегда иметь под рукой пример использования.
И так, начнем.
ФО различаются по месту хранения значений:
- Константа
- Реквизит справочника
- Ресурс регистра сведений
Все реквизиты для хранения значений ФО обычно имеют тип «булево».
ФО с местом хранения – константа
Самый простой и наиболее распространенный способ использования механизма ФО. Собственно, необходимо создать новую константу с типом «булево», создать новую ФО, и выбрать в качестве места хранения созданную ранее константу:
На закладке «Состав», нужно выбрать все элементы, на видимость которых будет влиять данная ФО. Это могут быть отдельные объекты, реквизиты и табличные части объектов и команды:
Дополнительно ФО можно указать для различных реквизитов форм.
Также, есть возможность опционального выполнения каких-либо действий в зависимости от значения ФО. Для получения значения ФО, в данном случае, используется следующий метод:
ПолучитьФункциональнуюОпцию(<Имя ФО>);
При изменении значений ФО в константах, результат можно увидеть сразу же в текущем сеансе, после выполнения следующей команды:
ОбновитьИнтерфейс();
Теоретически, можно привязывать несколько ФО к одним и тем же объектам. Но нужно всегда помнить, что объект или реквизит будет доступен, если будет включена хотя бы одна из всех ФО, подключенных к нему. По этой причине, подключать к одним и тем же объектам или реквизитам несколько функциональных опций следует очень внимательно.
Для быстрого просмотра всех ФО, которые подключены к объекту, удобно использовать пункт контекстного меню «Дополнительно» в списке объектов конфигурации:
На заметку. По умолчанию, для новой ФО установлено свойство «Привилегированный режим при получении». По этому, можно использовать ФО для получения значений объектов на которые у пользователя отсутствуют права.
Параметризуемые ФО с местом хранения – реквизит справочника
Если с константами все просто и интуитивно понятно, данный режим использования является более сложным. В качестве места хранения значения ФО, в данном случае выбирается реквизит справочника с типом «булево».
Но каким образом система поймет, какой элемент справочника необходимо использовать для определения значения ФО?
Для этой цели существует дополнительный объект конфигурации «Параметры функциональных опций»:
В свойстве «Использование» должен быть указан справочник, в котором хранится значение ФО. Причем, система не позволяет выбрать для разных параметров ФО в качестве использования один и то же справочник. По этому, параметр ФО однозначно привязан к самой функциональной опции.
Дальше, необходимо установить этот параметр, чтобы система знала, какой элемент справочника нужно использовать. Установка параметров ФО может быть выполнена как для всего интерфейса, так и для каждой конкретной формы. Наиболее распространенным вариантом использования данного вида ФО, является управление элементами форм. Особенно, элементами панели навигации формы, так как другой возможности для программного управления видимостью элементов панели навигации нет.
Необходимо помнить один очень важный момент, если параметр функциональной опции не задан, система будет проверять все элементы справочника. Если хотя бы в одном элементе реквизит – значение ФО будет «Истина», объекты, привязанные к ФО будут доступны. Настройка такого плана достаточно часто применяется в типовых конфигурациях.
Пример управления видимостью команды «Договоры» в форме элемента справочника «Контрагенты»:
Необходимо создать ФО с местом хранения – реквизит справочника «Контрагенты.ИспользоватьДоговоры». В состав ФО включить справочник «Договоры». Также, необходимо создать параметр ФО «Контрагент» и установить для свойства «Использование» — справочник Контрагенты. Далее, в модуле формы в событии «ПриСозданииНаСервере», нужно присваивать значению параметра ФО ссылку на текущий объект:
УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("Контрагент", Ссылка));
Недостатком данного решения, является необходимость записи контрагента для управления видимостью команды «Договоры». Для решения этой проблемы, можно использовать для хранения значений функциональных опций отдельный справочник. В таком варианте, при изменении управляющего реквизита нет необходимости перезаписывать данные текущего справочника, и результат будет виден непосредственно после изменения. Дополнительным преимуществом такого варианта, будет использование одного параметра ФО «НастройкаФормы» для управления видимостью команд навигации произвольного количества объектов. Свойство параметра ФО «Использование», в данном случае, должно указывать на справочник с настройками:
В модуле формы в событии «ПриСозданииНаСервере» и при изменении реквизита «Использовать договоры» необходимо разместить программный код следующего вида:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПараметрыФО.Ссылка
|ИЗ
| Справочник. ПараметрыФО КАК ПараметрыФО
|ГДЕ
| ПараметрыФО. ИспользоватьДоговоры = & ИспользоватьДоговоры ";
Запрос.УстановитьПараметр("ИспользоватьДоговоры ", Объект. ИспользоватьДоговоры);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
ЭлементНастройки = ВыборкаДетальныеЗаписи.Ссылка;
Иначе
НовыйЭлементНастройки = Справочники. ПараметрыФО.СоздатьЭлемент();
НовыйЭлементНастройки. ИспользоватьДоговоры = Объект. ИспользоватьДоговоры;
НовыйЭлементНастройки.Записать();
ЭлементНастройки = НовыйЭлементНастройки.Ссылка;
КонецЕсли;
УстановитьПараметрыФункциональныхОпцийФормы Новый Структура("НастройкаФормы", ЭлементНастройки));
Похожий механизм применяется в типовых конфигурациях УТ 11, КА 2 и ЕРП 2.
Параметризуемые ФО с местом хранения – ресурс регистра сведений
Применение данного варианта параметризуемых ФО похоже на вариант с местом хранения – реквизит справочника. Отличием можно считать возможность использования нескольких параметров для отбора значения ФО. А также использование системного параметра ФО «Период» для отбора значения по дате в том случае, если для хранения значений ФО используется периодический регистр сведений:
Каждое измерение регистра сведений – это отдельный параметр ФО, который необходимо установить в форме. Дополнительно, можно установить параметр «Период», если требуется получить значение на определенную дату.
Данный функционал удобно использовать в формах документов, для управления видимостью элементов в зависимости от даты. Например, настроить видимость реквизитов или команд панели навигации в зависимости от данных учетной политики, действующей на дату документа:

Пример использования:
ПараметрыФО = Новый Структура;
ПараметрыФО.Вставить("Период", Объект.Дата);
ПараметрыФО.Вставить("Организация", Объект.Организация);
ПараметрыФО.Вставить("Склад", Объект.Склад);
УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФО);
Также, можно настроить опционально (в зависимости от даты документа) выполнение каких либо произвольных действий. Например дополнительные отборы при выборе значений реквизитов. Для этого нужно будет обращаться к значению ФО напрямую:
Если ПолучитьФукнциональнуюОпциюФормы(«ИспользоватьДополнительныйОтбор») Тогда
...
КонецЕсли;
Не стоит забывать, что существует возможность получения значений параметризуемой ФО вне контекста определенной формы, в любом месте программного кода:
ПараметрыФО = Новый Структура;
ПараметрыФО.Вставить("Период", Объект.Дата);
ПараметрыФО.Вставить("Организация", Объект.Организация);
ПараметрыФО.Вставить("Склад", Объект.Склад);
ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныйОтбор ", ПараметрыФО);
В качестве второго параметра, в данном случае, передается структура со значениями параметров ФО.
На заметку. Дополнительным вариантом использования ФО с местом хранения значений в регистре сведений, является доступ к значениям регистра без наличия у пользователя прав на данный регистр. В этом случае, ресурсы регистра могут иметь произвольный тип данных.
Использование параметризуемых ФО для настройки интерфейса
Как было описано выше, параметризуемые ФО в основном используются для настройки внешнего вида форм. Однако, их можно применять и для настройки всего интерфейса в целом. Например, можно управлять видимостью интерфейса в зависимости от текущего пользователя системы, или в зависимости от любого другого выбранного параметра (организации, склада, подразделения).
Допустим, в зависимости от организации, которая выбрана для пользователя основной, необходимо показывать в интерфейсе дополнительные команды. Для решения такой задачи, нужно добавить в справочник «Организации» новый реквизит «ВыводитьДопКоманды» с типом «булево». Создать новую ФО, указав в качестве места хранения созданный реквизит. В качестве состава ФО, выбрать необходимые команды или объекты (если нужно выводить стандартные команды). Создать новый параметр ФО с указанием в свойстве «Использование» — справочник Организации. Далее, необходимо при запуске системы, в модуле управляемого приложения, определять организацию, которая выбрана для текущего пользователя основной, и устанавливать параметр функциональных опций интерфейса:
ПараметрыФОИнтерфейса = Новый Структура;
ПараметрыФОИнтерфейса.Вставить("Организация", ОсновнаяОрганизацияПользователя);
УстановитьПараметрыФункциональныхОпцийИнтерфейса(ПараметрыФОИнтерфейса);
Вот и все, команды будут доступны, если включена соответствующая настройка для текущей организации пользователя.
При необходимости, можно получить значение параметра ФО, который задан для текущего сеанса:
ПараметрФООрганизация = ПолучитьПараметрыФункциональныхОпцийИнтерфейса().Организация;
На заметку. Если одни и те же параметры ФО используются для управления интерфейсом и для управления видимостью реквизитов форм, следует помнить, что параметры, установленные для интерфейса, по умолчанию передаются в управляемую форму.
На сего дня все, если информация показалась Вам интересной, добавляйте в избранное J
Другие мои статьи про механизмы платформы 1С
-
Работа с объектом «СообщениеПользователю», и другие варианты информирования пользователя.
-
Основные принципы работы с режимами автоматических и управляемых блокировок. Варианты контроля остатков. Разделение итогов.
Объект 1с «Функциональные опции» — предназначены для выделения в прикладном решении функциональности, которую можно включать (выключать) при внедрении, не изменяя само прикладное решение (совместно с Подсистемами формируют интерфейс тонкого клиента 1С). Являются частью механизма функциональных опций.
Механизм функциональных опций включает в себя два типа объектов метаданных:
Функциональная опция;Параметры функциональных опций.
Подробнее
Отсюда
Функциональная опция представляет собой объект метаданных, который может непосредственно влиять на состав интерфейса приложения (если функциональная опция хранит свое значение в реквизите типа Булево). С помощью объектов этого типа можно скрыть элементы, которые относятся к недоступной функциональности. Например, опция Валютный учет может скрыть справочник Валюты, поле Валюта из документов, колонку Валютная сумма из отчетов.
Источником значения функциональной опции является объект метаданных, выбранный в качестве свойства Хранение, например, это может быть константа.
В случае хранения значения функциональной опции в реквизите справочника или ресурсе регистра сведений требуется дополнительная информация, которая указывает на то, как именно выбрать значение опции. Для этой цели предусмотрен отдельный объект метаданных – Параметры функциональных опций.
Можно сказать, что параметры функциональных опций являются осями координат пространства значений функциональных опций. Причем один параметр функциональных опций может определять значение «своей» оси координат одновременно для множества функциональных опций.
[свернуть]
Функциональные опции могут оказывать влияние:
- на пользовательский интерфейс:
- глобальный командный интерфейс;
- реквизиты формы (в том числе колонки реквизита формы типа ТаблицаЗначений или ДеревоЗначений);
- команды формы;
- на отчеты, реализованные с помощью системы компоновки данных;
- на алгоритмы, написанные на встроенном языке – имеется возможность получать значения функциональных опций из встроенного языка и использовать их в различных условиях, например, для уменьшения объема вычислений (см., например, Нестандартное применение функциональных опций).
ВНИМАНИЕ! Если клиентское приложение работает с файловым вариантом информационной базы через веб-сервер, то изменение функциональной опции приведет к изменению пользовательского интерфейса только после перезапуска веб-сервера (перезапуск клиентского приложения не вызовет изменение пользовательского интерфейса).
- Хранение — поле, в котором необходимо выбирать объект с типом булево. Как правило, используются константы.
- Привилегированный режим при получении — флаг отвечает за возможность получения значения функциональной опции в привилегированном режиме.
- Состав — список объектов и реквизитов объектов, видимость которых включается/выключается при выключении/выключении функциональной опции (будет управляться с помощью управляемой формы).
Например, в зависимости от условий конкретного внедрения, можно предусмотреть отключение учета товаров по складам, чтобы при оформлении документов поступления товаров поле Склад не отображалось в форме документа.
Подробнее…
Особенности использования Функциональных опций 1С:
- Функциональные опции могут иметь значения произвольного типа (не обязательно
Булево). - Добавляя новую константу для использования функциональной опции, не забудьте включить ее в соответствующую подсистему и назначить на нее права.
- Работа с функциональными опциями доступна из встроенного языка, благодаря чему разработчик может создавать собственные алгоритмы обработки значений функциональных опций.
- Команда командного интерфейса будет исключена из командного интерфейса в случае, если функциональной опцией отключен:
- реквизит, являющийся параметром команды;
- тип параметра команды (если тип параметра команды составной, то команда становится недоступной тогда, когда отключаются все типы параметра).
ВНИМАНИЕ! Функциональные опции и их параметры не влияют на состав базы данных: все таблицы и поля присутствуют в БД независимо от состояния функциональных опций.
Влияние функциональных опций на реквизиты и команды формы:
- Основной реквизит управляемой формы типа
<Вид>Объект(СправочникОбъект,ДокументОбъекти т.д.) будет отключен в том случае, если функциональной опцией отключен соответствующий объект конфигурации. Анализируются только те функциональные опции, которые не имеют параметров. - Основной реквизит управляемой формы типа
ДинамическийСписокбудет отключен в том случае, если функциональной опцией отключен объект конфигурации, который указан в качестве основной таблицы динамического списка. Анализируются только те функциональные опции, которые не имеют параметров. - Отключается реквизит формы ссылочного типа, если объект конфигурации, образующий этот тип, отключен функциональной опцией. Реквизит формы составного типа отключается в том случае, если функциональные опции отключают все составляющие типы.
- Таблица формы будет отключена, если она отображает данные реквизита формы, отключенного функциональной опцией.
- В диалоге выбора типов (например, для полей ввода, связанных с реквизитами составного типа) отсутствуют типы, если объекты конфигурации, формирующие эти типы, отключены функциональной опцией. Информация о типах, отключенных функциональными опциями, кешируется на стороне клиента и очищается через 20 минут или во время вызова метода
ОбновитьИнтерфейс().
ВНИМАНИЕ! В отличие от командного интерфейса, значения параметров функциональных опций устанавливаются только для конкретного экземпляра формы.
Создание параметра функциональных опций
Параметр функциональной опции создается с помощью объекта конфигурации 1С «Параметры функциональных опций».
Рисунок
[свернуть]
Это можно сделать в окне конфигурации, добавив новый объект.
Свойства параметра функциональных опций:
- Использование — устанавливает набор объектов, значения которых будут определять то, как следует выбирать значение функциональной опции. В список доступных объектов входят справочники и измерения регистра сведений. Для каждого параметра функциональных опций в данном списке можно выбрать один справочник (из всего перечня справочников) и по одному измерению каждого регистра сведений.
ВНИМАНИЕ! Нельзя использовать один и тот же объект метаданных в нескольких параметрах функциональных опций.
Подробная статья по использованию — по ссылке http://master1c8.ru/
Функциональные опции позволяют разработчику описать возможности прикладного решения, которые можно оперативно включать или выключать на этапе внедрения и/или в процессе работы системы. Например, возможность работы с дополнительными свойствами товаров можно выделить в отдельную функциональную опцию. Тогда если отключить эту возможность, в интерфейсе прикладного решения «пропадут» все связанные (с дополнительными свойствами товаров) возможности.
Система способна автоматически учитывать состояние сделанных настроек – скрывать выключенные возможности, делая интерфейс приложения более ясным и понятным для пользователя.
При разработке возникают ситуации, когда значение функциональной опции должно зависеть от неких параметров, например, валютный учет ведется не у всех организаций. Для реализации такой зависимости служат Параметры функциональных опций – объекты, параметризующие функциональные опции.
2. На что влияют функциональные опции
2.1. Общая информация
Функциональные опции могут оказывать влияние:
● На пользовательский интерфейс – при выключении каких-либо функциональных опций система скрывает в пользовательском интерфейсе все элементы, относящиеся к ней. При этом затрагиваются следующие элементы интерфейса:
● глобальный командный интерфейс;
● реквизиты формы (в том числе колонки реквизита формы типа ТаблицаЗначений или ДеревоЗначений);
● команды формы;
● отчеты, реализованные с помощью системы компоновки данных.
ВНИМАНИЕ! Если клиентское приложение работает с файловым вариантом информационной базы через веб-сервер, то изменение функциональной опции приведет к изменению пользовательского интерфейса только после перезапуска веб-сервера (перезапуск клиентского приложения не вызовет изменение пользовательского интерфейса).
● На алгоритмы, написанные на встроенном языке – имеется возможность получать значения функциональных опций из встроенного языка и использовать их в различных условиях, например, для уменьшения объема вычислений.
ВНИМАНИЕ! Функциональные опции и их параметры не влияют на состав базы данных. Все таблицы и поля присутствуют в базе данных независимо от состояния функциональных опций.
2.2. Глобальный командный интерфейс
Влияние функциональных опций на глобальный командный интерфейс заключается в том, что система скрывает команды всех объектов, относящихся к выключенным опциям. Например, если значение функциональной опции Закупки равно значению Ложь, то будут скрыты команды открытия раздела Закупки, создания документа ПриходТовара, открытия списка ПриходТовара и т. д.
В свою очередь, опция Закупки может учитывать значение параметра функциональной опции, например, Организация. Изменяя с помощью методов встроенного языка значение этого параметра, можно изменять состояние функциональной опции, а, следовательно, и видимость элемента интерфейса.
Также следует учитывать следующие особенности формирования командного интерфейса:
● Команда будет исключена из командного интерфейса в том случае, если реквизит, являющийся параметром команды, отключен функциональной опцией.
● Команда будет исключена из командного интерфейса в том случае, если тип параметра команды отключен функциональной опцией. Если тип параметра команды составной, то команда становится недоступной тогда, когда отключаются все типы параметра.
2.3. Форма
В форме функциональные опции могут влиять на реквизиты и команды формы и (как следствие) изменять видимость связанных с ними элементов формы (поля и колонки – для реквизитов формы, кнопки – для команд формы). При разработке формы необходимо учитывать следующие особенности поведения системы:
● Основной реквизит управляемой формы типа <Вид>Объект (СправочникОбъект, ДокументОбъект и т. д.) будет отключен в том случае, если функциональной опцией отключен соответствующий объект конфигурации. Анализируются только те функциональные опции, которые не имеют параметров.
● Основной реквизит управляемой формы типа ДинамическийСписок будет отключен в том случае, если функциональной опцией отключен объект конфигурации, который указан в качестве основной таблицы динамического списка. Анализируются только те функциональные опции, которые не имеют параметров.
● Отключается реквизит формы ссылочного типа, если объект конфигурации, образующий этот тип, отключен функциональной опцией. Реквизит формы составного типа отключается в том случае, если функциональные опции отключают все составляющие типы.
● Отключается реквизит формы типа <Вид>Объект (включая основной реквизит формы), если объект конфигурации, образующий этот тип, отключен функциональной опцией. Анализируются только те функциональные опции, которые не имеют параметров.
● Таблица формы будет отключена, если она отображает данные реквизита формы, отключенного функциональной опцией.
● В диалоге выбора типов (например, для полей ввода, связанных с реквизитами составного типа) отсутствуют типы, если объекты конфигурации, формирующие эти типы, отключены функциональной опцией. Информация о типах, отключенных функциональными опциями, кешируется на стороне клиента и очищается через 20 минут или во время вызова метода ОбновитьИнтерфейс().
ВНИМАНИЕ! В отличие от командного интерфейса, значения параметров функциональных опций устанавливаются только для конкретного экземпляра формы.
2.4. Система компоновки данных
Система компоновки данных в основном используется для построения отчетов. Функциональные опции влияют на состав данных, которые выводятся в отчет, и на состав настроек отчета, доступных пользователю. Например, если выключена функциональная опция Валютный учет, то в отчете, выводящем реестр документов Приход товара, будет отсутствовать колонка Валюта и Валютная сумма, а в настройках будет отсутствовать возможность отбора, группировки, сортировки и т. д. по полю Валюта.
2.5. Характеристики
Функциональные опции оказывают влияние на видимость полей формы, которые отображают значение характеристики объекта. Для этого необходимо включить в состав функциональной опции реквизит, хранящий значение характеристики.
Рассмотрим пример. Характеристики используются для справочника Товары, виды характеристик хранятся в плане видов характеристик Характеристики, а значения – в качестве ресурса регистра сведений ЗначенияХарактеристик. Ресурс входит в состав функциональной опции УчетХарактеристик.
В случае отключения функциональной опции УчетХарактеристик в формах отключается видимость полей (колонка Значение и поле Значение), отображающих значения характеристик, как показано на рис1.
3. Общая схема работы
Механизм функциональных опций включает в себя два типа объектов метаданных: Функциональная опция и Параметры функциональных опций.
Функциональная опция представляет собой объект метаданных, который может непосредственно влиять на состав интерфейса приложения (если функциональная опция хранит свое значение в реквизите типа Булево). С помощью объектов этого типа можно скрыть элементы, которые относятся к недоступной функциональности. Например, опция Валютный учет может скрыть справочник Валюты, поле Валюта из документов, колонку Валютная сумма из отчетов. Источником значения функциональной опции является объект метаданных, выбранный в качестве свойства Хранение, например, это
может быть константа.
В случае хранения значения функциональной опции в реквизите справочника или ресурсе регистра сведений требуется дополнительная информация, которая указывает на то, как именно выбрать значение опции. Для этой цели предусмотрен отдельный объект метаданных – Параметры функциональных опций.
Можно сказать, что параметры функциональных опций являются осями координат пространства значений функциональных опций. Причем один параметр функциональных опций может определять значение «своей» оси координат одновременно для множества функциональных опций.
Рассмотрим пример: допустим, суммовой учет зависит от склада, принадлежащего конкретной организации (см. рис.98). В нашей информационной базе
можно вести учет от имени разных организаций и на разных складах.
Для хранения значений функциональных опций создадим регистр сведений, где измерениями (осями координат) будут:
● Организация (соответствующего типа);
● Склад (соответствующего типа).
Ресурсом регистра сведений будет значение функциональной опции суммового учета.
Тогда общая структура конфигурации будет выглядеть следующим образом:
● Регистр сведений СуммовойУчет:
● измерение Организация;
● измерение Склад;
● ресурс СуммовойУчет, имеющий тип Булево.
● Параметр функциональных опций Организация. Свойство Использование указывает на измерение Организация регистра сведений СуммовойУчет.
● Параметр функциональных опций Склад. Свойство Использование указывает на измерение Склад регистра сведений СуммовойУчет.
● Функциональная опция СуммовойУчет. Свойство Хранение указывает на ресурс СуммовойУчет регистра сведений СуммовойУчет.
В результате для того, чтобы определить необходимость ведения суммового учета, нам необходимо в каждом конкретном случае указать значения параметров функциональных опций (Организация и Склад) и получить значение функциональной опции.
Так, в примере, показанном на рис.2, для Организации 1 и Склада 1 суммовой учет разрешен, а для Организации 2 и Склада 1 суммовой учет запрещен.
4. Взаимодействие с другими объектами
Функциональные опции могут быть назначены следующим объектам конфигурации:
● Подсистемы,
● Общие команды,
● Общие формы,
● Константы,
● Критерии отбора,
● Справочник,
● Документ,
● Журнал,
● План счетов,
● План видов характеристик,
● План видов расчета,
● Бизнес-процесс,
● Задача,
● Планы обмена,
● Отчет,
● Обработка,
● Регистр накопления,
● Регистр сведений,
● Регистр бухгалтерии,
● Регистр расчета,
● Команда,
● Реквизит объекта метаданных,
● Табличная часть,
● Реквизит табличной части,
● Признак учета,
● Признак учета субконто,
● Реквизиты адресации,
● Измерение регистра,
● Ресурс регистра.
Также функциональные опции могут влиять на видимость элементов формы.
5. Создание
5.1. Создание функциональной опции
Для того чтобы создать функциональную опцию, необходимо создать объект конфигурации Функциональная опция. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Функциональные опции и добавить новый объект.
В результате будет создан объект конфигурации Функциональная опция, который можно использовать для назначения функциональных опций другим объектам метаданных.
Кроме имени объект имеет обязательное для заполнения свойство – Хранение. В редакторе для него можно выбрать один из объектов, который будет являться источником значения опции. В список доступных объектов входят:
● константы,
● реквизиты справочников,
● ресурсы регистров сведений.
Ограничение на тип источника значения опции нет, но для управления интерфейсом пригодны только те функциональные опции, которые хранят свои значения в реквизитах, имеющих тип Булево. Значения функциональных опций с другими типами доступны только для анализа на встроенном языке.
Свойство Привилегированный режим при получении отвечает за способ получения (и кеширования) значения функциональной опции.
Если данное свойство установлено, то значение функциональной опции получается в привилегированном режиме. Полученное значение кешируется для всех сеансов, связанных с данной информационной базой.
Если свойство Привилегированный режим при получении сброшено, то получение значения функциональной опции выполняется в обычном режиме.
Кеширование выполняется для текущего сеанса. Кешируется как значение (если его удалось получить), так и признак невозможности получения значения (в том случае, если значение получить не удалось).
Кеш сбрасывается при изменении значений параметров сеанса.
СОВЕТ. Рекомендуется устанавливать свойство Привилегированный режим при получении для всех случаев, когда значение функциональной опции не содержит конфиденциальную информацию.
5.2. Создание параметра функциональных опций
Для того чтобы создать параметр функциональной опции, необходимо создать объект конфигурации Параметры функциональных опций. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Параметры функциональных опций и добавить новый объект.
Кроме имени, параметр имеет обязательное свойство Использование. В нем указывается набор объектов, значения которых будут определять то, как следует выбирать значение функциональной опции. В список доступных объектов входят справочники и измерения регистра сведений. Для каждого параметра функциональных опций в данном списке можно выбрать один справочник (из всего перечня справочников) и по одному измерению каждого регистра сведений.
ВНИМАНИЕ! Нельзя использовать один и тот же объект метаданных в нескольких параметрах функциональных опций.
6. Использование
6.1 Назначение объектам метаданных
Объект метаданных (например, справочник) можно отнести к одной или нескольким функциональным опциям. Для этого служит свойство Функциональные опции, которое содержит ссылки на созданные в конфигурации функциональные опции.
Список доступных опций ограничен только теми опциями, для которых в свойстве Хранение назначен объект с типом значения Булево.
ВНИМАНИЕ! Если объекту не назначена ни одна функциональная опция, то он считается видимым всегда. В противном случае объект считается видимым, если хотя бы одна из назначенных ему функциональных опций является включенной (т. е. функциональные опции сочетаются «по ИЛИ»).
6.2. Назначение реквизитам и командам формы
Объекты, принадлежащие форме (Реквизиты и Команды), также можно задействовать в механизме функциональных опций.
Сделать это можно в редакторе формы, установив свойство Функциональные опции для требуемого объекта.
Состояние функциональных опций будет влиять на отображение объектов формы точно так же, как это происходит в случае объектов метаданных.
Например, в случае с командой, отключенной с помощью функциональной опции, будут убраны все связанные с ней кнопки.
Если реквизиту формы или команде не назначена ни одна функциональная опция, то реквизит формы или команда считается видимой всегда. В противном случае реквизит формы или команда считается видимой, если хотя бы одна из назначенных ему функциональных опций является включенной.
6.3. Использование в механизме ограничения доступа к данным
В условиях механизма ограничения доступа к данным Функциональные опции могут использоваться точно так же, как и Параметры сеанса . Допустимо использовать только не зависящие от параметров опции, то есть те, которые привязаны к константам.
ВНИМАНИЕ! Системой контролируется уникальность имен между параметрами сеанса и функциональными опциями.
6.4. Определение значения функциональной опции
Значение функциональной опции определяется объектом, который указан в свойстве Хранение. В случае константы используется ее значение. Для опции, связанной с реквизитом справочника или ресурсом регистра сведений, – значения, хранящиеся в этих объектах. Для того чтобы найти конкретный объект, который хранит значение функциональной опции, необходима дополнительная информация – набор значений параметров функциональных опций.
Если опция хранится в реквизите справочника, параметр должен содержать ссылку на конкретный элемент справочника. Если опция хранится в ресурсе регистра сведений, должны быть указаны значения всех измерений регистра. В этом случае каждое измерение должно характеризоваться своим параметром.
Если для функциональной опции, имеющей тип Булево, заданы не все параметры, то выполняется сложение «по ИЛИ» всех значений с не заданными параметрами. Например, если функциональная опция хранится в регистре сведений с измерениями Организация и Склад и задано только измерение Организация, то значение функциональной опции будет равно Истина, если хотя бы у одного из складов, перечисленных в измерении Склад, значение функциональной опции будет равно значению Истина.
Для функциональной опции, имеющий тип, отличный от Булево, ситуация с не полностью заданными параметрами приводит к генерации исключения.
Методы встроенного языка позволяют получить значение опции, как в зависимости от переданных параметров, так и для параметров, установленных
для командного интерфейса или конкретной формы. В том случае, когда изменение значения объекта, указанного в свойстве функциональной опции Хранение, выполняется в транзакции, собственно значение функциональной опции будет изменено только после завершения транзакции. Пока открыта транзакция – значение функциональной опции будет равно значению, актуальному на момент начала транзакции.
Если функциональная опция привязана к ресурсу периодического регистра сведений, то система использует срез последних для получения значения опции. Если требуется получать значение опции на какую-либо другую дату, необходимо указать значение для параметра функциональных опций Период (Period), имеющий тип Дата, который будет использоваться как дата получения среза. Этот параметр не нужно создавать в метаданных. Он предоставляется системой автоматически.
При использовании параметризованных функциональных опций следует учитывать следующие особенности поведения:
● В формах списков колонка реквизита, связанного с параметризованной функциональной опцией, будет отображаться, если в информационной базе хранится хотя бы одно включенное значение данной функциональной опции.
● Если необходимо, чтобы при открытии формы реквизиты, связанные с функциональными опциями, были отключены по умолчанию, то нужно
установить значения этих параметров в значения, отсутствующие в информационной базе (для справочников – пустая ссылка, для регистров сведений – значения измерений, для которых нет записей). В этом случае функциональная опция будет иметь значение Ложь.
● В том случае, когда в качестве параметра указана ссылка на группу (если типа параметра функциональной опции допускает создание групп), а не ссылка на элемент, поведение системы будет следующим:
● если реквизит, в котором хранится значение функциональной опции, используется как для элемента, так и для группы, то значение функциональной опции будет определяться значением этого реквизита.
● если реквизит, в котором хранится значение функциональной опции, не используется для группы, то при получении значения функциональной опции c помощью методов ПолучитьФункциональнуюОпцию(), ПолучитьФункциональнуюОпциюФормы() и ПолучитьФункциональнуюОпциюИнтерфейса() будет возращено значение NULL. Если, параметризованная таким значением, функциональная опция оказывает влияние на пользовательский интерфейс, то система будет воспринимать ее как выключенную (функциональная опция будет иметь значение Ложь).
● Для командообразующих объектов метаданных возможно установить привязку к параметризованной функциональной опции. В командном интерфейсе команды таких объектов будут отображаться только в том случае, если есть хотя бы одна комбинация параметров функциональных опций, при которых значение функциональной опции равно Истина. Однако с помощью метода УстановитьПараметрыФункциональныхОпцийИнтерфейса() можно задать конкретные значения параметров функциональных опций, и тогда видимость
команд будет определяться именно заданными параметрами.
● Динамический список автоматически использует функциональные опции, используемые формой. Если реквизиты, которые используются в запросе динамического списка, будут отключены при заданной комбинации параметров функциональных опций, данные по ним не будут выбраны и отображены в динамическом списке, а реквизит будет удален из списков доступных реквизитов в диалоге настройки отображения данных
динамического списка (в режиме 1С:Предприятие).
7. Работа с функциональными опциями во встроенном языке
Методы глобального контекста ПолучитьФункциональнуюОпцию() и ПолучитьФункциональнуюОпциюИнтерфейса() возвращают значение функциональной
опции. Разница между ними заключается в том, что первый метод позволяет указать набор параметров функциональных опций, а второй – возвращает значение функциональной опции исходя из параметров, заданных для командного интерфейса. В форме есть свой метод, который возвращает значение опции для параметров, указанных в рамках формы, – ПолучитьФункциональнуюОпциюФормы().
Для обновления глобального командного интерфейса следует явным образом вызывать метод УстановитьПараметрыФункциональныхОпцийИнтерфейса().
Командный интерфейс будет обновлен с учетом нового состояния функциональных опций.
ПРИМЕЧАНИЕ. Если значение функциональной опции изменяется в базе данных, то автоматического обновления глобального командного интерфейса и открытых в это время форм не происходит. Для этого следует использовать метод ОбновитьИнтерфейс() после записи значений функциональных опций в базу данных.
Следует помнить, что установка параметров функциональных опций (и выполнение метода ОбновитьИнтерфейс()) приводит к следующим последствиям:
● для каждой формы вызывается закрытие всех вспомогательных форм (с вызовом соответствующих обработчиков);
● формы, отказавшиеся от закрытия, не закрываются;
● происходит обновление состава элементов основной формы;
● если на момент обновления интерфейса активной формой была основная, происходит отображение основной формы в соответствии с новым составом элементов;
● если на момент обновления интерфейса активной формой была вспомогательная форма, то:
● будет выполнена команда открытия вспомогательной формы, если после обновления интерфейса она является доступной;
● в противном случае обновляется состав элементов основной формы и выполняется ее отображение;
● если на момент обновления интерфейса активной формой была вспомогательная форма, открытая с помощью команды, не относящейся к панели навигации формы, то вместо этой формы будет обновлен состав элементов основной формы и выполнено ее отображение.
Для того чтобы обновить конкретную форму, следует либо заново открыть ее, либо вызвать метод УстановитьПараметрыФункциональныхОпцийФормы(),
при этом вышеописанная последовательность действий отрабатывает только для той формы, в контексте которой вызвана установка параметров функциональных опций формы.
Параметры не обязательно указывать все сразу, можно изменить значение конкретного параметра или набора параметров выборочно. Но эффективнее осуществляется именно групповая установка значений одним вызовом.
Для получения значений параметров необходимо вызвать соответствующую функцию (ПолучитьПараметрыФункциональныхОпцийИнтерфейса() или
ПолучитьПараметрыФункциональныхОпцийФормы()), которая вернет установленные параметры в виде структуры, где ключом будет выступать имя параметра.
При открытии форма автоматически использует параметры функциональных опций, установленных для командного интерфейса.
Показывать по
10
20
40
сообщений
Новая тема
Ответить
F_L
Дата регистрации: 15.03.2020
Сообщений: 6
При очередном обновлении конфигурации 1С с версии 3.0.44.124 на 3.0.44.198 используя рекомендованную платформу 8,3,9,1818 я получаю вот такое сообщение на скриншотах:
|
Скрытый текст |
|---|
Подскажите, на сколько это вообще опасное сообщение. Я сколько не читал, так и не понял, что имеется ввиду.
F_L
Дата регистрации: 15.03.2020
Сообщений: 6
При обновлении дальше на 3.0.44.204 используя ту же платформу только 1 ошибка связанная с Новостями для Девелоперов, которой конечно уже в помине нету на сервере Значит всё рОвно при обновлении предыдущем прошло?
|
Скрытый текст |
|---|
F_L
Дата регистрации: 15.03.2020
Сообщений: 6
И дальше на 3.0.46.20 тоже самое, что и в моём втором посте. Интересно долго это сообщение будет за мной следовать
Контрольное Cоотношение Равенство
Дата регистрации: 28.01.2018
Сообщений: 229
F_L,
помеченные на удаление удалили?
ТиИ сделали?
кэши почистили?
F_L
Дата регистрации: 15.03.2020
Сообщений: 6
Контрольное Cоотношение Равенство, вот с первым не уверен, а второй и третий пункт: Да и Да.
В итоге со второй ошибкой про «СтандартныеЗначения_Developers» я обновился до 3.0.46.11. Это ошибка как я вижу не критическая , а предупреждение. Что она означает — мне не понятно конечно. А первая ошибка с функциональной опцией попросту исчезла — что конечно прекрасно, но не понятно
Никита Мельников
Дата регистрации: 24.04.2020
Сообщений: 4
Странно когда ошибка уходит сама, потому как есть вероятность, что вернется и гораздо больше(
Показывать по
10
20
40
сообщений
Примеры использования функциональных опций для управления интерфейсом и элементами управляемых форм, с различными вариантами хранения значений: константа, реквизит справочника, ресурс регистра сведений.
Все прекрасно знают, что такое функциональные опции (далее ФО). Все успешно с ними работают как в типовых конфигурациях, так и в собственных разработках. Так что я не буду описывать основное назначение данного функционала.
Но, как показывает практика, не все в курсе всех возможностей и вариантов применения данного механизма. Данная статья будет кратким практическим пособием по использованию ФО, с описанием всех возможностей механизма. Она будет интересна как начинающим разработчикам, так и более опытным. Некоторые возможности ФО используются достаточно редко, и неплохо всегда иметь под рукой пример использования.
И так, начнем.
ФО различаются по месту хранения значений:
- Константа
- Реквизит справочника
- Ресурс регистра сведений
Все реквизиты для хранения значений ФО обычно имеют тип «булево».
ФО с местом хранения – константа
Самый простой и наиболее распространенный способ использования механизма ФО. Собственно, необходимо создать новую константу с типом «булево», создать новую ФО, и выбрать в качестве места хранения созданную ранее константу:
На закладке «Состав», нужно выбрать все элементы, на видимость которых будет влиять данная ФО. Это могут быть отдельные объекты, реквизиты и табличные части объектов и команды:
Дополнительно ФО можно указать для различных реквизитов форм.
Также, есть возможность опционального выполнения каких-либо действий в зависимости от значения ФО. Для получения значения ФО, в данном случае, используется следующий метод:
ПолучитьФункциональнуюОпцию(<Имя ФО>);
При изменении значений ФО в константах, результат можно увидеть сразу же в текущем сеансе, после выполнения следующей команды:
ОбновитьИнтерфейс();
Теоретически, можно привязывать несколько ФО к одним и тем же объектам. Но нужно всегда помнить, что объект или реквизит будет доступен, если будет включена хотя бы одна из всех ФО, подключенных к нему. По этой причине, подключать к одним и тем же объектам или реквизитам несколько функциональных опций следует очень внимательно.
Для быстрого просмотра всех ФО, которые подключены к объекту, удобно использовать пункт контекстного меню «Дополнительно» в списке объектов конфигурации:
На заметку. По умолчанию, для новой ФО установлено свойство «Привилегированный режим при получении». По этому, можно использовать ФО для получения значений объектов на которые у пользователя отсутствуют права.
Параметризуемые ФО с местом хранения – реквизит справочника
Если с константами все просто и интуитивно понятно, данный режим использования является более сложным. В качестве места хранения значения ФО, в данном случае выбирается реквизит справочника с типом «булево».
Но каким образом система поймет, какой элемент справочника необходимо использовать для определения значения ФО?
Для этой цели существует дополнительный объект конфигурации «Параметры функциональных опций»:
В свойстве «Использование» должен быть указан справочник, в котором хранится значение ФО. Причем, система не позволяет выбрать для разных параметров ФО в качестве использования один и то же справочник. По этому, параметр ФО однозначно привязан к самой функциональной опции.
Дальше, необходимо установить этот параметр, чтобы система знала, какой элемент справочника нужно использовать. Установка параметров ФО может быть выполнена как для всего интерфейса, так и для каждой конкретной формы. Наиболее распространенным вариантом использования данного вида ФО, является управление элементами форм. Особенно, элементами панели навигации формы, так как другой возможности для программного управления видимостью элементов панели навигации нет.
Необходимо помнить один очень важный момент, если параметр функциональной опции не задан, система будет проверять все элементы справочника. Если хотя бы в одном элементе реквизит – значение ФО будет «Истина», объекты, привязанные к ФО будут доступны. Настройка такого плана достаточно часто применяется в типовых конфигурациях.
Пример управления видимостью команды «Договоры» в форме элемента справочника «Контрагенты»:
Необходимо создать ФО с местом хранения – реквизит справочника «Контрагенты.ИспользоватьДоговоры». В состав ФО включить справочник «Договоры». Также, необходимо создать параметр ФО «Контрагент» и установить для свойства «Использование» — справочник Контрагенты. Далее, в модуле формы в событии «ПриСозданииНаСервере», нужно присваивать значению параметра ФО ссылку на текущий объект:
УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("Контрагент", Ссылка));
Недостатком данного решения, является необходимость записи контрагента для управления видимостью команды «Договоры». Для решения этой проблемы, можно использовать для хранения значений функциональных опций отдельный справочник. В таком варианте, при изменении управляющего реквизита нет необходимости перезаписывать данные текущего справочника, и результат будет виден непосредственно после изменения. Дополнительным преимуществом такого варианта, будет использование одного параметра ФО «НастройкаФормы» для управления видимостью команд навигации произвольного количества объектов. Свойство параметра ФО «Использование», в данном случае, должно указывать на справочник с настройками:
В модуле формы в событии «ПриСозданииНаСервере» и при изменении реквизита «Использовать договоры» необходимо разместить программный код следующего вида:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПараметрыФО.Ссылка
|ИЗ
| Справочник. ПараметрыФО КАК ПараметрыФО
|ГДЕ
| ПараметрыФО. ИспользоватьДоговоры = & ИспользоватьДоговоры ";
Запрос.УстановитьПараметр("ИспользоватьДоговоры ", Объект. ИспользоватьДоговоры);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
ЭлементНастройки = ВыборкаДетальныеЗаписи.Ссылка;
Иначе
НовыйЭлементНастройки = Справочники. ПараметрыФО.СоздатьЭлемент();
НовыйЭлементНастройки. ИспользоватьДоговоры = Объект. ИспользоватьДоговоры;
НовыйЭлементНастройки.Записать();
ЭлементНастройки = НовыйЭлементНастройки.Ссылка;
КонецЕсли;
УстановитьПараметрыФункциональныхОпцийФормы Новый Структура("НастройкаФормы", ЭлементНастройки));
Похожий механизм применяется в типовых конфигурациях УТ 11, КА 2 и ЕРП 2.
Параметризуемые ФО с местом хранения – ресурс регистра сведений
Применение данного варианта параметризуемых ФО похоже на вариант с местом хранения – реквизит справочника. Отличием можно считать возможность использования нескольких параметров для отбора значения ФО. А также использование системного параметра ФО «Период» для отбора значения по дате в том случае, если для хранения значений ФО используется периодический регистр сведений:
Каждое измерение регистра сведений – это отдельный параметр ФО, который необходимо установить в форме. Дополнительно, можно установить параметр «Период», если требуется получить значение на определенную дату.
Данный функционал удобно использовать в формах документов, для управления видимостью элементов в зависимости от даты. Например, настроить видимость реквизитов или команд панели навигации в зависимости от данных учетной политики, действующей на дату документа:

Пример использования:
ПараметрыФО = Новый Структура;
ПараметрыФО.Вставить("Период", Объект.Дата);
ПараметрыФО.Вставить("Организация", Объект.Организация);
ПараметрыФО.Вставить("Склад", Объект.Склад);
УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФО);
Также, можно настроить опционально (в зависимости от даты документа) выполнение каких либо произвольных действий. Например дополнительные отборы при выборе значений реквизитов. Для этого нужно будет обращаться к значению ФО напрямую:
Если ПолучитьФукнциональнуюОпциюФормы(«ИспользоватьДополнительныйОтбор») Тогда
...
КонецЕсли;
Не стоит забывать, что существует возможность получения значений параметризуемой ФО вне контекста определенной формы, в любом месте программного кода:
ПараметрыФО = Новый Структура;
ПараметрыФО.Вставить("Период", Объект.Дата);
ПараметрыФО.Вставить("Организация", Объект.Организация);
ПараметрыФО.Вставить("Склад", Объект.Склад);
ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныйОтбор ", ПараметрыФО);
В качестве второго параметра, в данном случае, передается структура со значениями параметров ФО.
На заметку. Дополнительным вариантом использования ФО с местом хранения значений в регистре сведений, является доступ к значениям регистра без наличия у пользователя прав на данный регистр. В этом случае, ресурсы регистра могут иметь произвольный тип данных.
Использование параметризуемых ФО для настройки интерфейса
Как было описано выше, параметризуемые ФО в основном используются для настройки внешнего вида форм. Однако, их можно применять и для настройки всего интерфейса в целом. Например, можно управлять видимостью интерфейса в зависимости от текущего пользователя системы, или в зависимости от любого другого выбранного параметра (организации, склада, подразделения).
Допустим, в зависимости от организации, которая выбрана для пользователя основной, необходимо показывать в интерфейсе дополнительные команды. Для решения такой задачи, нужно добавить в справочник «Организации» новый реквизит «ВыводитьДопКоманды» с типом «булево». Создать новую ФО, указав в качестве места хранения созданный реквизит. В качестве состава ФО, выбрать необходимые команды или объекты (если нужно выводить стандартные команды). Создать новый параметр ФО с указанием в свойстве «Использование» — справочник Организации. Далее, необходимо при запуске системы, в модуле управляемого приложения, определять организацию, которая выбрана для текущего пользователя основной, и устанавливать параметр функциональных опций интерфейса:
ПараметрыФОИнтерфейса = Новый Структура;
ПараметрыФОИнтерфейса.Вставить("Организация", ОсновнаяОрганизацияПользователя);
УстановитьПараметрыФункциональныхОпцийИнтерфейса(ПараметрыФОИнтерфейса);
Вот и все, команды будут доступны, если включена соответствующая настройка для текущей организации пользователя.
При необходимости, можно получить значение параметра ФО, который задан для текущего сеанса:
ПараметрФООрганизация = ПолучитьПараметрыФункциональныхОпцийИнтерфейса().Организация;
На заметку. Если одни и те же параметры ФО используются для управления интерфейсом и для управления видимостью реквизитов форм, следует помнить, что параметры, установленные для интерфейса, по умолчанию передаются в управляемую форму.
На сего дня все, если информация показалась Вам интересной, добавляйте в избранное J
Другие мои статьи про механизмы платформы 1С
-
Работа с объектом «СообщениеПользователю», и другие варианты информирования пользователя.
-
Основные принципы работы с режимами автоматических и управляемых блокировок. Варианты контроля остатков. Разделение итогов.
Что такое функциональные опции (далее ФО) и как с ними работать, необходимо знать каждому кто начинает заниматься разработкой на платформе 1С Предприятие 8. Конечно, можно и нужно читать официальную документацию, но для понимания новичками она бывает довольно сложна. В этой статье рассмотрим понятие ФО и принципы работы с этим объектом конфигурации. Приступим…
Что же такое функциональные опции?
Функциональные опции (ФО) – это объекты конфигурации, которые предназначены для включения и выключения различной функциональности в интерфейсе пользователя за счет отображения или сокрытия элементов включенных в состав ФО. Если коротко то ФО –выключатель видимости элементов на форме.
Для чего это может быть необходимо?
Функционал (типового) прикладного решения производится для решения обширного спектра задач для работы с различными разделами, разрезами учета, который здорово нагрузит интерфейс различными элементами и может оказаться чрезмерно большим громоздким и не бесполезным в рамках отдельного предприятия. ФО дают возможность настроить интерфейс пользователя сделав его более ясным, простым и понятным – оставив только нужные документы, реквизиты, логику и отключив все ненужное. Например: Наличие ФО «Многофирменный учет»
позволит вести учет разных предприятий, но во всех документах и отчетах станет видимым реквизит для выбора предприятия, который совсем не нужен для тех кто не ведет многофирменный учет, поэтому при выключении ФО реквизит будет просто скрыт из интерфейса.
На что влияют ФО ?
ФО могут оказывать влияние:
- На пользовательский интерфейс – при выключении каких либо ФО система скрывает в польззовательском интерфейсе все элементы которые к ней относятся, затрагивая следующие элементы интерфейса:
- Глобальный командный интерфейс
- Реквизиты формы (в т.ч. колонки реквизита формы типа ТаблицаЗначений или ДеревоЗначений);
- Команды формы
- Отчеты реализованные с помощью системы СКД.
- На алгоритмы написанные на встроенном языке – имеется возможность програмно получать значения ФО и использовать их в различных условиях, например для уменьшения объема вычислений.
ВНИМАНИЕ!
ФО не влияют на состав базы данных. Все таблицы и поля присутствуют в базе данных не зависимо от состояния значений ФО.
Как управлять функциональной опцией?
Выше уже было сказано, что включение / выключение видимости объектов добавленных в состав ФО зависит от логического значения, которое храниться в одном из трех видах объектов конфигурации (Константа, реквизит справочника, ресурс регистра сведений) и иметь Булевский тип.
Значение Истина – включенный объект в состав ФО отображается в интерфейсе программы. Ложь – включенный объект в состав ФО НЕ отображается в интерфейсе программы.
Какие свойства имеются у объекта функциональная опция?
- Хранение — поле в котором выбирается объект (Константа, Реквизит справочника, Ресурс регистра сведений) булевского типа.
- Привилегированный режим при получении — флаг отвечает за возможность получения значения функциональной опции в привилегированном режиме.
- Состав — список объектов и реквизитов объектов, видимостью которых можно будет управлять с помощью функциональной опции.
Рассмотрев объект конфигурации ФО, мы плавно подошли еще к одному объекту конфигурации — Параметры Функциональных Опций (далее ПФО), который неразрывно связан с механизмом работы ФО и для полноты понимания работы ФО и дальнейшей возможности рассмотрения примеров, рассмотрим этот объект прямо сейчас в этой же статье.
Что такое и для чего нужны ПФО ?
Параметры Функциональных Опций (ПФО) – хоть и представлены в дереве метаданных отдельным объектом, обособленно от ФО использоваться не могут и предназначены они для сообщения ФО – из какого элемента справочника или измерения регистра сведений брать значение для получения значения ФО.
У объекта ПФО есть только одно интересующее нас свойство:
Использование, которое предназначено для указания ФО в каком справочнике или ресурсе регистра сведений будут хранится элементы или записи для получения значения ФО.
На словах не совсем понятно, поэтому рассмотрим примеры работы с хранением значения ФО во всех доступных объектах.
Для экспериментов создадим ФО ВалютныйУчет и добавим в состав ФО справочник Валюты для организации возможности выбирать валюту в договорах с клиентами.
Значение ФО хранится в константе
Это самый простой способ управления функциональной опцией и его можно применить для создания возможности управления глобальными настройками прикладного решения, например – для включения или отключения валютного учета, учета партий, учета НДС, возможности включения многофирменного и многоскладского учета и т.д.
Для использования значения хранящегося в константе не нужно писать никакого кода, достаточно просто создать константу Булевского типа и указать ее в качестве значения хранения.
Пример использования константы:
Значение ФО хранится в реквизите справочника
Данный вариант реализации в отличие от хранения значения в константе имеет ряд особенностей. Если просто выбрать в свойстве Хранение реквизит справочника Булевского типа, то такое решение будет работать не корректно. После установки у элемента справочника флажка в состояние Истина (видимость включена) и перезаписи элемента справочника, скрытый элемент диалога отобразится у элемента справочника при повторном открытии. Не корректность заключается в том, что включив видимость хотя-бы у одно элемента из всего справочника, скрытый элемент диалога отобразится у всех остальных элементов, даже у тех у кого реквизит хранящий значение ФО установлен в состояние Ложь (видимость выключена).
Для того чтобы поведение системы стало корректным и скрытые элементы диалога отображались только у тех элементов справочника, где соответствующая настройка включена, необходимо дополнительно использовать объект конфигурации — параметры функциональных опций (ПФО) и при открытии формы элемента справочника передавать ссылку на текущий элемент справочника в ПФО .
Используя объект конфигурации ПФО, мы указываем ФО из какого именно элемента справочника нужно взять значение ФО.
Данное решение так же имеет недостаток, – который заключается в том, что значение ФО хранится в реквизите справочника, а значение реквизита в базе данных, и устанавливается оно только после записи элемента справочника БД. Другими словами – при такой реализации хранения значения ФО, можно бесконечно и безрезультатно включать/выключать ФО , до момента пока элемент справочника не будет записан в базу данных никаких изменений в интерфейсе происходить не будет.
Для решения этой проблемы можно хранить значение ФО в другом справочнике назовем его для примера ЗначенияНастройкиФО и тогда при изменении значения флага управляющего видимостью должна отработать процедура которая будет осуществлять поиск в справочнике с именем ЗначенияНастройкиФО элементов с необходимым значением реквизита и его дальнейшей передачи в параметр ФО.
&НаСервере
Процедура УстановитьПараметрыФО()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗначенияНастройкиФО .Ссылка КАК Ссылка
|ИЗ
| Справочник.ЗначенияНастройкиФО КАК ЗначенияНастройкиФО
|ГДЕ
| ЗначенияНастройкиФО .ВключитьВалютныйУчет = &ВключитьВалютныйУчет";
Запрос.УстановитьПараметр("ВключитьВалютныйУчет", Объект.ВключитьВалютныйУчет);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Значение = ВыборкаДетальныеЗаписи.Ссылка;
Иначе
НовыйЭлемент = Справочники.ЗначенияНастройкиФО .СоздатьЭлемент();
НовыйЭлемент.ВключитьВалютныйУчет = Объект.ВключитьВалютныйУчет;
НовыйЭлемент.Записать();
Значение = НовыйЭлемент.Ссылка;
КонецЕсли;
УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("Договор", Значение));
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьПараметрыФО();
КонецПроцедуры
&НаКлиенте
Процедура ВключитьВалютныйУчетПриИзменении(Элемент)
УстановитьПараметрыФО();
ОбновитьИнтерфейс();
КонецПроцедуры
Значение ФО хранится в ресурсе Регистра сведений
Хранение значения ФО в регистре сведений может быть обусловлено необходимостью управлять видимостью элементов диалога по нескольким условиям, иначе говоря, ФО включит видимость тогда, когда найдет запись, в Регистре сведений совпадающую по всем переданным значениям измерений, а так же хранение значения в регистре сведений позволит реализовать хранение истории изменений значения.
Для примера рассмотрим такую ситуацию:
— Валютный учет действует только для определенной организации и определенного склада в соответствии с этим видимость элемента «Валюта» в документе «Продажа», должна появляться только для соответствующей организации и соответствующего склада.
Для решения этой задачи изменим свойство хранение ФО «Валютный учет» с реквизита справочника, на измерение регистра сведений.
Для начала создадим регистр сведений в котором будем хранить значение в разрезе измерений.
Изменим значение хранение ФО на ресурс регистра сведений.
Создадим два объекта ПФО «Организация» и «Склад» и укажем, откуда брать значения для параметров.
В документе продажа будем вызывать процедуру «УстановкаПараметровФО()» для установки значения ПФО в обработчиках событий : «ПриСозданииНаСервере» и «ПриИзменении» при изменении значений элементов формы «Организация» и «Склад».
Проверяем что получилось…
В регистр сведений добавляем запись, содержащую значения для какой организации и какого склада ведется валютный учет.
Добавляем документ и выбираем организацию и склад..
Меняем склад на другой.
Как предполагалось –элемент формы «Валюта» просто исчез с формы.
В этой статье мы познакомились с механизмом ФО и рассмотрели базовые приемы работы с объектами конфигурации ФО и ПФО.
Благодарю за внимание.
С выходом платформы «1С:Предприятие 8.2» в дереве конфигурациипоявился новый объект – «Функциональные опции»
. Он активно применяется во всех типовых конфигурациях, основанных на управляемых формах, и служит для упрощения процесса отображения отдельных реквизитов, объектов в интерфейсе. Например, в вашей конфигурации есть модуль для обмена с внешним веб-сервисов. Это модуль задействует ряд реквизитов в документах, регистрах и отдельные компоненты в подсистемах. Модуль является опциональным и необходим не каждой компании. Логично, раз модуль нужен не всем, то и отображать вся связанные с ним элементы/поля тоже нужно не всегда.
В старых версиях платформы, решение подобных задач требовало написание дополнительного кода, который приходилось вызывать во всех зависимых участках. Например, если нам требовались скрыть определенные реквизиты формы (в зависимости от значения настройки), то требовалось вызывать соответствующий код при открытии формы. Это было не очень удобно и в большинстве случаев разработчики на подобные вещи забивали.
Хорошо, если требуется скрыть только поля в форме документов, а ведь у нас же еще могут формы регистров, с которыми также возможно взаимодействие пользователя. Написать универсальную функцию управлением отображением довольно сложно и потребует дополнительного времени, которого никогда не хватает.
Функциональные опции призваны решить эту и многие другие сложности, связанные с отображением элементов интерфейса/состава доступных объектов в пользовательском интерфейсе. В этой заметке я не буду рассматривать примеры использования основного назначения функциональных опций, а обращу внимание на применение их не совсем стандартным образом. Возможно, он знаком многим продвинутым разработчикам, но я к такому способу пришел совершенно случайно. Точней он был навеян практикой программирования на JavaScript.
Первая нестандартная фишка функциональных опций – возможность создавать обертки. Рассмотрим самый простейший пример – константы. Например, вы добавляете новую константу в конфигурацию с огромным количеством пользовательских ролей. Чтобы пользователи могли обращаться к значению константы вам необходимо установить соответствующим ролям права на чтение. Если права не выставить, то пользователи не смогут получить ее значение. Если ролей много и они не наследуются от базовой роли, то придется потратить время на простановку соответствующих флажков.
Функциональная опция может решить эту проблему более элегантно. Идея в следующем: создаем константу (например, ). Права на нее не назначаем. Создаем одноименную функциональную опцию и указываем в свойстве «Хранение»
указываем константу «ВозможностьСохраненияДанных»
. Также устанавливаем флаг «Привилегированный режим при получении»
.
Все, теперь в любом месте кода, где требуется обратиться к константе пишем так:
Поскольку мы установили для опции привилегированный режим, то никаких дополнительных прав для константы указывать не нужно. Конечно, не нужно применять данную технику во всех случаях мыслимых и немыслимых ситуациях. Помните, грамотная расстановка прав – залог спокойствия. Используйте трюк только в действительно необходимых случаях.
Кейс №2. Дополнительный уровень абстракции
Не знаю, как правильней назвать этот способ, но в моем представлении он звучит именно так. Рассмотрим предыдущий пример. Есть у нас все та же константа «Возможность сохранения данных». Мы работаем с ней, используя одноименную функциональную опцию в качестве обертки.
Теперь представим, что нам захотелось избавиться от константы и перейти на использования справочника. Типичный сценарий решения такой задачи (если мы используем только константу) будет запуск инструмент глобального поиска с целью обнаружения обращения к константе. Напомню, если мы не используем функциональную опцию в качестве обертки, то константе мы должны обращаться так:
Константы.ВозможностьСохраненияДанных.Получить();
Находим все вызовы и заменяем на путь к новому объекту хранения. Согласитесь, это довольно неудобно. Если мы воспользовались предыдущем кейсом (применение функциональной опции в качестве обертки), то для «переезда» нам потребуется только зайти в свойства функциональной опции и изменить свойство «Хранение»
. Например, указать там «Справочник»
или «Регистр сведений»
. Никаких игр с глобальным поиском не потребуется. Код обращения к значению константы через функциональную опцию останется прежним:
ПолучитьФункциональнуюОпцию(«ВозможностьСохраненияДанных»);
30.03.2017
Функциональные опции 1С 8.3 (Механизм, использование)
Для начала важно
отметить, что механизм функциональных опций НЕ
ограничивает доступ к данным, а только лишь управляет видимостью (отображением) данных на форме. Для ограничения доступа к объектам в платформе используется механизм ролей.
Поэтому рассмотрение механизма функциональных опций начнем с описания задачи. В нашей мини-конфигурации имеется один справочник «Склады». Предположим что доступ к этому справочнику есть у всех пользователей.
Еще раз! Механизм функциональных опций управляет отображением данных на форме,
а не ограничивает доступ к объекту метаданных (Справочник, документ, записи регистра….)
Необходимо сделать настройку «Использовать несколько складов» (Да да… Это же есть в УТ 11.Х, там такое и для организаций сделано)
. Если используем несколько складов, то в интерфейсе доступен справочник склады, если нет то команда которая открывает один склад (полагаем что он один и есть в таком случае, и не усложняем задачу).
Объекты метаданных конфигурации
Для реализации поставленной задачи нам потребуется:
- Две функциональных опции «ИспользоватьНесколькоСкладов» и «НеИспользоватьНесколькоСкладов». Первая отвечает за доступность справочника, а вторая за доступность общей команды для вызова алгоритма «открытия» склада
- Одноименные константы с типом «Булево» для хранения значений функциональных опций
- Справочник «Склады»
- Общая команда «ОткрытьОсновнойСклад». Не забываем указать для нее группу команд, иначе не применить конфигурацию (будет ошибка)
И добавим одну подсистему куда включим все имеющиеся объекты
Настройка функциональных опций
Первая опция «ИспользоватьНесколькоСкладов». Значение хранится в одноименной константе, в состав входит справочник «Склады». Таким образом, когда значение константы «Истина» справочник доступен в интерфейсе, когда ложь, справочник не будет отображаться и в интерфейсе (Содержимом подсистем, формах объектов и т.д.)
Вторая функциональная «НеИспользоватьНесколькоСкладов» установлена когда НЕ установлена первая «ИспользоватьНесколькоСкладов».
Т.е. если мы не используем несколько складов (ИспользоватьНесколькоСкладов = ЛОЖЬ и справочник «Склады» недоступен), то отображается команда «ОткрытьОсновнойСклад» доступность которой управляется опцией «НеИспользоватьНесколькоСкладов» (НеИспользоватьНесколькоСкладов = ИСТИНА)
Проверяем поведение системы
Вариант №1. ИспользоватьНесколькоСкладов = Истина, НеИспользоватьНесколькоСкладов = Ложь. В интерфейсе доступен справочник «Склады»
Вариант №2. ИспользоватьНесколькоСкладов = Ложь, НеИспользоватьНесколькоСкладов = Истина. В интерфейсе НЕ доступен справочник «Склады», вместо этого доступна общая команда «ОткрытьОсновнойСклад»
Практически все типовые решения на платформе 1С:Предприятие 8.x используют механизм функциональных опций. Он позволяет управлять функциональностью конфигурации блочно.
Так, например, опция «Использование внутренних заказов» (см. скриншот справа) позволяет сделать доступным этот документ для использования в режиме «1С:Предприятие» пользователю, а также включает отдельные ветки алгоритмов, связанных с данным функционалом.
Сегодня в статье мы рассмотрим работу функциональных опций, их настройку и небольшой пример их использования на тестовой конфигурации. Начнем с рассмотрения принципа их работы.
Принцип работы
Как было сказано выше, функциональная опция позволяет включать/отключать связанный с ней функционал конфигурации. Рассмотрим последовательность действий по созданию и настройке этого объекта конфигурации.
В ветке конфигурации «Общие->Функциональные опции»
мы можем создать новый объект или посмотреть свойства уже созданных опций. В тестовой конфигурации создадим функциональную опцию «ВключитьВажность». В самом начале, когда еще не была произведена настройка объекта, окно списка его свойств будет выглядеть следующим образом:
Свойства «Имя» и «Синоним» имеют стандартное назначение. Особый интерес вызывают настройки «Хранение» и «Состав».
В поле «Хранение» выбирается объект в конфигурации, откуда функциональная опция будет получать значение. Обычно для этих целей используются константы типа булево. По значению константы платформа будет определять включать связанный функционал или нет.
Возможности конфигурации, связанные с функциональной опцией, настраиваются на вкладке «Состав». На скриншоте выше представлен список выбора объектов, включаемых в ее состав.
Если один объект конфигурации включен в состав нескольких функциональных опций, то он будет задействован в прикладном решении, если хотя бы одна из них будет включена.
Опция «Привилегированный режим при получении» позволяет отключить проверку прав доступа при получении значения функциональной опции, что позволит положительно повлиять на производительность (будут исключены излишние операции проверки прав доступа) и снизит сложность дальнейшей разработки (не нужно настраивать права для объекта, хранящего значение функциональной опции).
Пример использования
В нашей тестовой конфигурации создадим перечисление «Важность», а также константу
«ВключитьВажность». Созданные объекты представлены на следующем скриншоте.
Константа предназначена для хранения значения функциональной опции. Перечисление же будет выступать в качестве значения ссылочного реквизита в тестовом документе, доступность которого будет определяться функциональной опцией.
![]() |
В тестовом документе будут два реквизита:
- «Комментарий» с типом «Строка».
- «Важность» с типом «ПеречислениеСсылка.Важность».
В состав функциональной опции добавим реквизит документа «Важность» и далее рассмотрим поведение платформы в пользовательском режиме.
Запустив программу в режиме «1С:Предприятие» откроем тестовый документ. На форме мы не увидим реквизита «Важность», поскольку еще не включили функциональную опцию.
Чтобы включить использование реквизита «Важность» необходимо установить значение константы «ВключитьВажность» в ИСТИНА. Тогда форма изменится следующим образом:
Работа функциональных опций распространяется практически на все объекты конфигурации, за исключением некоторых из ветки «Общие», выполняющих в основном служебные функции. Например, нельзя в состав функциональной опции включить другие функциональные опции (да и смысла это особого не имеет).
Рассмотрим несколько интересных моментов работы данного объекта конфигурации:
1. Настройка функциональных опций практически никак не влияет на SQL-запросы, формируемых платформой.
Например, при открытии документа с отключенной функциональной опцией, платформа в любом случае в запросе получает значение этого реквизита. На следующем скриншоте приведены SQL-запросы, формируемых с включенной и отключенной опцией.
2. Элемент формы «Важность» на форме, вне зависимости от значения функциональной опции, всегда имеет значения для свойств «Видимость» и «Доступность» равными ИСТИНА.
Действительно, как при создании формы на сервере, так и при открытии формы, а также при дальнейшей работе с ней, свойства «Видимость» и «Доступность» не устанавливаются в ЛОЖЬ платформой автоматически. Вероятно, 1С:Предприятие 8.x делает это «за кулисами».
3. Платформа для получения значения функциональной опции формирует SQL-запрос к СУБД в соответствии с объектом хранения, т.е. к константе. В одной из предыдущих статей мы уже говорили о построении SQL-запросов к константам и способе их хранения в базе данных.
В нашем примере платформа формирует следующий SQL-запрос:
Что касается момента получения значения функциональной опции, то платформа руководствуется следующим принципом:
первое получение значения функциональной опции происходит при обращению к объекту/реквизиту, входящим в ее состав. В дальнейшем платформа использует кэшируемое значение до тех пор, пока не будет изменено значение объекта, который хранит это значение (в нашем примере — константы «ВключитьВажность») или перезапущен сеанс пользователя. Значение функциональной опции кэшируется в рамках отдельного сеанса.
Все вышесказанное проверил экспериментальным путем. Все, что использовал для экспериментов находится в тестовой конфигурации (ссылка в конце статьи), за исключением .
Вывод
Функциональные опции неотъемлемая часть практически любого тиражного решения на платформе 1С:Предприятие 8.x. Именно благодаря этому механизму можно создавать конфигурации с блочным построением функционала, который с легкостью включается/отключается при настройке программы. При этом возможности механизма можно расширить за счет использования параметров функциональных опций , но это уже тема для другой статьи.
За опыт работы с платформой очень редко приходится использовать функциональные опции, поскольку заказчик точно знает, что ему необходимо. И создавать какие-то универсальные механизмы, за которые придется дополнительно доплачивать, плюс не факт, что они будут использоваться, является очень редким при доработке типовых решений или внедрении на конкретном предприятии.
Файлы для загрузки:
Печать (Ctrl+P)
1. Назначение функциональных опций
Функциональные опции позволяют разработчику описать возможности прикладного решения, которые можно оперативно включать или выключать на этапе внедрения и/или в процессе работы системы. Например, возможность работы с дополнительными свойствами товаров можно выделить в отдельную функциональную опцию. Тогда если отключить эту возможность, в интерфейсе прикладного решения «пропадут» все связанные (с дополнительными свойствами товаров) возможности.
Система способна автоматически учитывать состояние сделанных настроек – скрывать выключенные возможности, делая интерфейс приложения более ясным и понятным для пользователя.
При разработке возникают ситуации, когда значение функциональной опции должно зависеть от неких параметров, например, валютный учет ведется не у всех организаций. Для реализации такой зависимости служат Параметры функциональных опций – объекты, параметризующие функциональные опции.
2. На что влияют функциональные опции
2.1. Общая информация
Функциональные опции могут оказывать влияние:
● На пользовательский интерфейс – при выключении каких-либо функциональных опций система скрывает в пользовательском интерфейсе все элементы, относящиеся к ней. При этом затрагиваются следующие элементы интерфейса:
● глобальный командный интерфейс;
● реквизиты формы (в том числе колонки реквизита формы типа ТаблицаЗначений или ДеревоЗначений);
● команды формы;
● отчеты, реализованные с помощью системы компоновки данных.
ВНИМАНИЕ!
Если клиентское приложение работает с файловым вариантом информационной базы через веб-сервер, то изменение функциональной опции приведет к изменению пользовательского интерфейса только после перезапуска веб-сервера (перезапуск клиентского приложения не вызовет изменение пользовательского интерфейса).
● На алгоритмы, написанные на встроенном языке – имеется возможность получать значения функциональных опций из встроенного языка и использовать их в различных условиях, например, для уменьшения объема вычислений.
ВНИМАНИЕ
! Функциональные опции и их параметры не влияют на состав базы данных. Все таблицы и поля присутствуют в базе данных независимо от состояния функциональных опций.
2.2. Глобальный командный интерфейс
Влияние функциональных опций на глобальный командный интерфейс заключается в том, что система скрывает команды всех объектов, относящихся к выключенным опциям. Например, если значение функциональной опции Закупки равно значению Ложь
, то будут скрыты команды открытия раздела Закупки
, создания документа ПриходТовара
, открытия списка ПриходТовара
и т. д.
В свою очередь, опция Закупки может учитывать значение параметра функциональной опции, например, Организация. Изменяя с помощью методов встроенного языка значение этого параметра, можно изменять состояние функциональной опции, а, следовательно, и видимость элемента интерфейса.
Также следует учитывать следующие особенности формирования командного интерфейса:
● Команда будет исключена из командного интерфейса в том случае, если реквизит, являющийся параметром команды, отключен функциональной опцией.
● Команда будет исключена из командного интерфейса в том случае, если тип параметра команды отключен функциональной опцией. Если тип параметра команды составной, то команда становится недоступной тогда, когда отключаются все типы параметра.
2.3. Форма
В форме функциональные опции могут влиять на реквизиты и команды формы и (как следствие) изменять видимость связанных с ними элементов формы (поля и колонки – для реквизитов формы, кнопки – для команд формы). При разработке формы необходимо учитывать следующие особенности поведения системы:
<Вид>Объект
(СправочникОбъек
т, ДокументОбъект
и т. д.) будет отключен в том случае, если функциональной опцией отключен соответствующий объект конфигурации. Анализируются только те функциональные опции, которые не имеют параметров.
● Основной реквизит управляемой формы типа ДинамическийСписок
будет отключен в том случае, если функциональной опцией отключен объект конфигурации, который указан в качестве основной таблицы динамического списка. Анализируются только те функциональные опции, которые не имеют параметров.
● Отключается реквизит формы ссылочного типа, если объект конфигурации, образующий этот тип, отключен функциональной опцией. Реквизит формы составного типа отключается в том случае, если функциональные опции отключают все составляющие типы.
● Отключается реквизит формы типа <Вид>Объект
(включая основной реквизит формы), если объект конфигурации, образующий этот тип, отключен функциональной опцией. Анализируются только те функциональные опции, которые не имеют параметров.
● Таблица формы будет отключена, если она отображает данные реквизита формы, отключенного функциональной опцией.
● В диалоге выбора типов (например, для полей ввода, связанных с реквизитами составного типа) отсутствуют типы, если объекты конфигурации, формирующие эти типы, отключены функциональной опцией. Информация о типах, отключенных функциональными опциями, кешируется на стороне клиента и очищается через 20 минут или во время вызова метода ОбновитьИнтерфейс
().
ВНИМАНИЕ!
В отличие от командного интерфейса, значения параметров функциональных опций устанавливаются только для конкретного экземпляра формы.
2.4. Система компоновки данных
Система компоновки данных в основном используется для построения отчетов. Функциональные опции влияют на состав данных, которые выводятся в отчет, и на состав настроек отчета, доступных пользователю. Например, если выключена функциональная опция Валютный учет
, то в отчете, выводящем реестр документов Приход товара
, будет отсутствовать колонка Валюта
и Валютная сумма
, а в настройках будет отсутствовать возможность отбора, группировки, сортировки и т. д. по полю Валюта
.
2.5. Характеристики
Функциональные опции оказывают влияние на видимость полей формы, которые отображают значение характеристики объекта. Для этого необходимо включить в состав функциональной опции реквизит, хранящий значение характеристики.
Рассмотрим пример. Характеристики используются для справочника Товары
, виды характеристик хранятся в плане видов характеристик Характеристики,
а значения – в качестве ресурса регистра сведений ЗначенияХарактеристик.
Ресурс входит в состав функциональной опции УчетХарактеристик
.
Рис. 1. Влияние функциональных опций на характеристики
В случае отключения функциональной опции УчетХарактеристик
в формах отключается видимость полей (колонка Значение
и поле Значение
), отображающих значения характеристик, как показано на рис1.
3. Общая схема работы
Механизм функциональных опций включает в себя два типа объектов метаданных: Функциональная опция
и .
Функциональная опция представляет собой объект метаданных, который может непосредственно влиять на состав интерфейса приложения (если функциональная опция хранит свое значение в реквизите типа Булево
). С помощью объектов этого типа можно скрыть элементы, которые относятся к недоступной функциональности. Например, опция Валютный учет
может скрыть справочник Валюты, поле Валют
а из документов, колонку Валютная сумма
из отчетов. Источником значения функциональной опции является объект метаданных, выбранный в качестве свойства Хранение,
например, это
может быть константа.
В случае хранения значения функциональной опции в реквизите справочника или ресурсе регистра сведений требуется дополнительная информация, которая указывает на то, как именно выбрать значение опции. Для этой цели предусмотрен отдельный объект метаданных – Параметры функциональных опций
.
Можно сказать, что параметры функциональных опций являются осями координат пространства значений функциональных опций. Причем один параметр функциональных опций может определять значение «своей» оси координат одновременно для множества функциональных опций.

Рассмотрим пример: допустим, суммовой учет зависит от склада, принадлежащего конкретной организации (см. рис.98). В нашей информационной базе
можно вести учет от имени разных организаций и на разных складах.
Для хранения значений функциональных опций создадим регистр сведений, где измерениями (осями координат) будут:
● Организация
(соответствующего типа);
● Склад
(соответствующего типа).
Ресурсом регистра сведений будет значение функциональной опции суммового учета.
Тогда общая структура конфигурации будет выглядеть следующим образом:
● Регистр сведений СуммовойУчет
:
● измерение Организация
;
● измерение Склад
;
● ресурс СуммовойУчет
, имеющий тип Булево.
● Параметр функциональных опций Организация
. Свойство Использование
указывает на измерение Организация
регистра сведений СуммовойУчет
.
● Параметр функциональных опций Склад
. Свойство Использование
указывает на измерение Склад
регистра сведений СуммовойУчет
.
● Функциональная опция СуммовойУчет
. Свойство Хранение
указывает на ресурс СуммовойУчет
регистра сведений СуммовойУчет
.
В результате для того, чтобы определить необходимость ведения суммового учета, нам необходимо в каждом конкретном случае указать значения параметров функциональных опций (Организация
и Склад
) и получить значение функциональной опции.
Так, в примере, показанном на рис.2, для Организации 1
и Склада 1
суммовой учет
разрешен, а для Организации 2
и Склада 1
суммовой учет запрещен.
4. Взаимодействие с другими объектами
Функциональные опции могут быть назначены следующим объектам конфигурации:
● Подсистемы,
● Общие команды,
● Общие формы,
● Константы,
● Критерии отбора,
● Справочник,
● Документ,
● Журнал,
● План счетов,
● План видов характеристик,
● План видов расчета,
● Бизнес-процесс,
● Задача,
● Планы обмена,
● Отчет,
● Обработка,
● Регистр накопления,
● Регистр сведений,
● Регистр бухгалтерии,
● Регистр расчета,
● Команда,
● Реквизит объекта метаданных,
● Табличная часть,
● Реквизит табличной части,
● Признак учета,
● Признак учета субконто,
● Реквизиты адресации,
● Измерение регистра,
● Ресурс регистра.
Также функциональные опции могут влиять на видимость элементов формы.
5. Создание
5.1. Создание функциональной опции
Для того чтобы создать функциональную опцию, необходимо создать объект конфигурации Функциональная опция. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие
, далее Функциональные опции и добавить новый объект.

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

Кроме имени объект имеет обязательное для заполнения свойство – Хранение. В редакторе для него можно выбрать один из объектов, который будет являться источником значения опции. В список доступных объектов входят:
● константы,
● реквизиты справочников,
● ресурсы регистров сведений.
Ограничение на тип источника значения опции нет, но для управления интерфейсом пригодны только те функциональные опции, которые хранят свои значения в реквизитах, имеющих тип Булево. Значения функциональных опций с другими типами доступны только для анализа на встроенном языке.
Свойство Привилегированный режим при получении отвечает за способ получения (и кеширования) значения функциональной опции.

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

Список доступных опций ограничен только теми опциями, для которых в свойстве Хранение назначен объект с типом значения Булево
.
ВНИМАНИЕ!
Если объекту не назначена ни одна функциональная опция, то он считается видимым всегда. В противном случае объект считается видимым, если хотя бы одна из назначенных ему функциональных опций является включенной (т. е. функциональные опции сочетаются «по ИЛИ»).
6.2. Назначение реквизитам и командам формы
Объекты, принадлежащие форме (Реквизиты и Команды), также можно задействовать в механизме функциональных опций.

Сделать это можно в редакторе формы, установив свойство Функциональные опции для требуемого объекта.
Состояние функциональных опций будет влиять на отображение объектов формы точно так же, как это происходит в случае объектов метаданных.
Например, в случае с командой, отключенной с помощью функциональной опции, будут убраны все связанные с ней кнопки.
Если реквизиту формы или команде не назначена ни одна функциональная опция, то реквизит формы или команда считается видимой всегда. В противном случае реквизит формы или команда считается видимой, если хотя бы одна из назначенных ему функциональных опций является включенной.
6.3. Использование в механизме ограничения доступа к данным
В условиях механизма ограничения доступа к данным Функциональные опции
могут использоваться точно так же, как и Параметры сеанса
. Допустимо использовать только не зависящие от параметров опции, то есть те, которые привязаны к константам.
ВНИМАНИЕ! Системой контролируется уникальность имен между параметрами сеанса и функциональными опциями.
6.4. Определение значения функциональной опции
Значение функциональной опции определяется объектом, который указан в свойстве Хранение. В случае константы используется ее значение. Для опции, связанной с реквизитом справочника или ресурсом регистра сведений, – значения, хранящиеся в этих объектах. Для того чтобы найти конкретный объект, который хранит значение функциональной опции, необходима дополнительная информация – набор значений параметров функциональных опций.
Если опция хранится в реквизите справочника, параметр должен содержать ссылку на конкретный элемент справочника. Если опция хранится в ресурсе регистра сведений, должны быть указаны значения всех измерений регистра. В этом случае каждое измерение должно характеризоваться своим параметром.
Если для функциональной опции, имеющей тип Булево, заданы не все параметры, то выполняется сложение «по ИЛИ» всех значений с не заданными параметрами. Например, если функциональная опция хранится в регистре сведений с измерениями Организация
и Склад
и задано только измерение Организация
, то значение функциональной опции будет равно Истина, если хотя бы у одного из складов, перечисленных в измерении Склад
, значение функциональной опции будет равно значению Истина.
Для функциональной опции, имеющий тип, отличный от Булево
, ситуация с не полностью заданными параметрами приводит к генерации исключения.
Методы встроенного языка позволяют получить значение опции, как в зависимости от переданных параметров, так и для параметров, установленных
для командного интерфейса или конкретной формы. В том случае, когда изменение значения объекта, указанного в свойстве функциональной опции Хранение
, выполняется в транзакции, собственно значение функциональной опции будет изменено только после завершения транзакции. Пока открыта транзакция – значение функциональной опции будет равно значению, актуальному на момент начала транзакции.
Если функциональная опция привязана к ресурсу периодического регистра сведений, то система использует срез последних для получения значения опции. Если требуется получать значение опции на какую-либо другую дату, необходимо указать значение для параметра функциональных опций Период
(Period), имеющий тип Дата
, который будет использоваться как дата получения среза. Этот параметр не нужно создавать в метаданных. Он предоставляется системой автоматически.
При использовании параметризованных функциональных опций следует учитывать следующие особенности поведения:
● В формах списков колонка реквизита, связанного с параметризованной функциональной опцией, будет отображаться, если в информационной базе хранится хотя бы одно включенное значение данной функциональной опции.
● Если необходимо, чтобы при открытии формы реквизиты, связанные с функциональными опциями, были отключены по умолчанию, то нужно
установить значения этих параметров в значения, отсутствующие в информационной базе (для справочников – пустая ссылка, для регистров сведений – значения измерений, для которых нет записей). В этом случае функциональная опция будет иметь значение Ложь
.
● В том случае, когда в качестве параметра указана ссылка на группу (если типа параметра функциональной опции допускает создание групп), а не ссылка на элемент, поведение системы будет следующим:
● если реквизит, в котором хранится значение функциональной опции, используется как для элемента, так и для группы, то значение функциональной опции будет определяться значением этого реквизита.
● если реквизит, в котором хранится значение функциональной опции, не используется для группы, то при получении значения функциональной опции c помощью методов ПолучитьФункциональнуюОпцию
(), () и () будет возращено значение NULL
. Если, параметризованная таким значением, функциональная опция оказывает влияние на пользовательский интерфейс, то система будет воспринимать ее как выключенную (функциональная опция будет иметь значение Ложь
).
● Для командообразующих объектов метаданных возможно установить привязку к параметризованной функциональной опции. В командном интерфейсе команды таких объектов будут отображаться только в том случае, если есть хотя бы одна комбинация параметров функциональных опций, при которых значение функциональной опции равно Истина
. Однако с помощью метода () можно задать конкретные значения параметров функциональных опций, и тогда видимость
команд будет определяться именно заданными параметрами.
● Динамический список автоматически использует функциональные опции, используемые формой. Если реквизиты, которые используются в запросе динамического списка, будут отключены при заданной комбинации параметров функциональных опций, данные по ним не будут выбраны и отображены в динамическом списке, а реквизит будет удален из списков доступных реквизитов в диалоге настройки отображения данных
динамического списка (в режиме 1С:Предприятие).
7. Работа с функциональными опциями во встроенном языке
Методы глобального контекста ПолучитьФункциональнуюОпцию()
и ПолучитьФункциональнуюОпциюИнтерфейса
() возвращают значение функциональной
опции. Разница между ними заключается в том, что первый метод позволяет указать набор параметров функциональных опций, а второй – возвращает значение функциональной опции исходя из параметров, заданных для командного интерфейса. В форме есть свой метод, который возвращает значение опции для параметров, указанных в рамках формы, – ПолучитьФункциональнуюОпциюФормы
().
Для обновления глобального командного интерфейса следует явным образом вызывать метод УстановитьПараметрыФункциональныхОпцийИнтерфейса
().
Командный интерфейс будет обновлен с учетом нового состояния функциональных опций.
ПРИМЕЧАНИ
Е. Если значение функциональной опции изменяется в базе данных, то автоматического обновления глобального командного интерфейса и открытых в это время форм не происходит. Для этого следует использовать метод ОбновитьИнтерфейс() после записи значений функциональных опций в базу данных.
Следует помнить, что установка параметров функциональных опций (и выполнение метода ОбновитьИнтерфейс
()) приводит к следующим последствиям:
● для каждой формы вызывается закрытие всех вспомогательных форм (с вызовом соответствующих обработчиков);
● формы, отказавшиеся от закрытия, не закрываются;
● происходит обновление состава элементов основной формы;
● если на момент обновления интерфейса активной формой была основная, происходит отображение основной формы в соответствии с новым составом элементов;
● если на момент обновления интерфейса активной формой была вспомогательная форма, то:
● будет выполнена команда открытия вспомогательной формы, если после обновления интерфейса она является доступной;
● в противном случае обновляется состав элементов основной формы и выполняется ее отображение;
● если на момент обновления интерфейса активной формой была вспомогательная форма, открытая с помощью команды, не относящейся к панели навигации формы, то вместо этой формы будет обновлен состав элементов основной формы и выполнено ее отображение.
Для того чтобы обновить конкретную форму, следует либо заново открыть ее, либо вызвать метод УстановитьПараметрыФункциональныхОпцийФормы(),
при этом вышеописанная последовательность действий отрабатывает только для той формы, в контексте которой вызвана установка параметров функциональных опций формы.
Параметры не обязательно указывать все сразу, можно изменить значение конкретного параметра или набора параметров выборочно. Но эффективнее осуществляется именно групповая установка значений одним вызовом.
Для получения значений параметров необходимо вызвать соответствующую функцию (ПолучитьПараметрыФункциональныхОпцийИнтерфейса
() или
ПолучитьПараметрыФункциональныхОпцийФормы()), которая вернет установленные параметры в виде структуры, где ключом будет выступать имя параметра.
При открытии форма автоматически использует параметры функциональных опций, установленных для командного интерфейса.
Назначение
Функциональные опции позволяют разработчику описать возможности конфигурации, которые можно оперативно включать или выключать на этапе внедрения и/или в процессе работы системы. Например, возможность работы с дополнительными свойствами товаров можно выделить в отдельную функциональную опцию. Тогда если отключить эту возможность, в интерфейсе конфигурации «пропадут» все связанные (с дополнительными свойствами товаров) возможности.
Система способна автоматически учитывать состояние сделанных настроек – скрывать выключенные возможности, делая интерфейс приложения более ясным и понятным для пользователя.
При разработке возникают ситуации, когда значение функциональной опции должно зависеть от неких параметров, например, валютный учет ведется не у всех организаций. Для реализации такой зависимости служат Параметры функциональных опций – объект, параметризующий функциональные опции.
На что влияют функциональные опции
Функциональные опции могут оказывать влияние:
- на пользовательский интерфейс – при выключении каких-либо функциональных опций система скрывает в пользовательском интерфейсе все элементы, относящиеся к ней. При этом затрагиваются следующие элементы интерфейса:
- глобальный командный интерфейс;
- формы;
- отчеты, реализованные с помощью системы компоновки данных.
- алгоритмы, написанные на встроенном языке – имеется возможность программно получать (и устанавливать) значения функциональных опций и использовать их в различных условиях, например, для уменьшения объема вычислений.
Глобальный командный интерфейс
Влияние функциональных опций на глобальный командный интерфейс заключается в том, что система скрывает команды всех объектов, относящихся к недоступным опциям. Например, если значение функциональной опции Закупки равно значению Ложь, то будут скрыты команды открытия раздела Закупки, создания документа ПриходТовара, открытия списка ПриходТовара и т. д.
В свою очередь, опция Закупки может учитывать значение параметра функциональной опции, например, Организация. Изменяя с помощью методов встроенного языка значение этого параметра, можно изменять состояние функциональной опции, а следовательно, и видимость элемента интерфейса.
Форма
В управляемой форме функциональные опции могут влиять на реквизиты формы, команды и (как следствие) на связанные с ними элементы формы.
От видимости реквизитов формы зависит видимость полей и таблиц управляемой формы, а видимость кнопок зависит от видимости команд.
Система компоновки данных
Система компоновки данных в основном используется для построения отчетов. Функциональные опции влияют на состав данных, которые выводятся в отчет, и на состав настроек отчета, доступных пользователю. Например, если выключена функциональная опция Валютный учет, то в отчете, выводящем реестр документов Приход товара, будет отсутствовать колонка Валюта и Валютная сумма, а в настройках будет отсутствовать возможность отбора, группировки, сортировки и т. д. по полю Валюта.
Подробнее о влиянии функциональных опций на доступность полей в отчете см. в разделе «Функциональные опции и право на просмотр поля в отчете» главы «Управляемые отчеты».
Общая схема работы
Механизм функциональных опций включает в себя два типа объектов метаданных: Функциональная опция и Параметр функциональных опций.
Функциональная опция представляет собой объект метаданных, непосредственно влияющий на состав интерфейса приложения. С помощью объектов этого типа можно скрыть элементы, которые относятся к недоступной функциональности. Например, опция Валютный учет может убрать справочник Валюты, поле Валюта из документов, колонку Валютная сумма из отчетов. Источником значения функциональной опции является объект метаданных, выбранный в качестве свойства Хранение, например, это может быть константа.
В случае хранения значения функциональной опции в реквизите справочника или ресурсе регистра сведений требуется дополнительная информация, которая указывает на то, как именно выбрать значение опции. Для этой цели предусмотрен отдельный объект метаданных – Параметр функциональных опций.
Можно сказать, что параметры функциональных опций являются осями координат пространства значений функциональных опций. Причем один параметр функциональных опции может определять значение «своей» оси координат одновременно для множества функциональных опций.
Рассмотрим пример: допустим, количественный учет зависит от подразделения, входящего в организацию. В нашей информационной базе можно вести учет от имени разных организаций.
Для хранения значений функциональных опций создадим регистр сведений, где измерениями (осями координат) будут:
- Организация (соответствующего типа);
- Подразделение (соответствующего типа).
Ресурсом регистра сведений будет значение функциональной опции количественного учета.
Тогда общая структура конфигурации будет выглядеть следующим образом:
- регистр сведений КоличественныйУчет:
- Измерение Организация,
- Измерение Подразделение,
- Ресурс КоличественныйУчет, имеющий тип Булево.
- параметр функциональных опций Организация. Свойство Использование указывает на измерение Организация регистра сведений КоличественныйУчет.
- параметр функциональных опций Подразделение. Свойство Использование указывает на измерение Подразделение регистра сведений КоличественныйУчет.
- функциональная опция КоличественныйУчет, свойство Хранение указывает на ресурс КоличественныйУчет регистра сведений КоличественныйУчет.
В результате для того, чтобы определить необходимость ведения количественного учета, нам необходимо в каждом конкретном случае указать значения параметров функциональных опций (Организация и Подразделение) и получить значение функциональной опции.
Взаимодействие с другими объектами
Функциональные опции могут быть назначены следующим объектам конфигурации:
- Подсистемы,
- Общие команды,
- Константы,
- Критерии отбора,
- Справочник,
- Документ,
- Журнал,
- План счетов,
- План видов характеристик,
- План видов расчета,
- Бизнес-процесс,
- Задача,
- Планы обмена,
- Отчет,
- Обработка,
- Регистр накопления,
- Регистр сведений,
- Регистр бухгалтерии,
- Регистр расчета,
- Команда,
- Реквизит объекта метаданных,
- Табличная часть,
- Реквизит табличной части,
- Признак учета,
- Признак учета субконто,
- Реквизиты адресации,
- Измерение регистра,
- Ресурс регистра.
Также функциональные опции могут влиять на видимость элементов формы.
Создание
Создание функциональной опции
Для того чтобы создать функциональную опцию, необходимо создать объект конфигурации Функциональная опция. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Функциональные опции и добавить новый объект.
В результате будет создан объект конфигурации Функциональная опция, который можно использовать для назначения функциональных опций другим объектам метаданным.
Кроме имени объект имеет обязательное для заполнения свойство — Хранение. В редакторе для него можно выбрать один из объектов, который будет являться источником значения опции. В список доступных объектов входят:
- константы,
- реквизиты справочников,
- ресурсы регистров сведений.
Ограничение на тип источника значения опции нет, но для управления интерфейсом пригодны только те функциональные опции, которые хранят свои значения в реквизитах, имеющих тип Булево. Значения функциональных опций с другими типами доступны только для анализа на встроенном языке.
Создание параметра функциональных опций
Для создания Параметра функциональной опции следует создать одноименный объект конфигурации. Это можно сделать в ветке Общие, пункт Параметры функциональных опций.
Кроме имени, параметр имеет обязательное свойство Использование. В нем указывается набор объектов, значения которых будут определять то, как следует выбирать значение функциональной опции. В список доступных объектов входят справочники и измерения регистра сведений. Для каждого параметра функциональных опций в данном списке можно выбрать один справочник (из всего перечня справочников) и по одному измерению каждого регистра сведений.
Использование
Назначение объектам метаданных
Объект метаданных (например, справочник) можно отнести к одной или нескольким функциональным опциям. Для этого служит свойство Функциональные опции, которое содержит ссылки на созданные в конфигурации функциональные опции. Список доступных опций ограничен только теми опциями, для которых в свойстве Хранение назначен объект, тип значения которого является Булево.
Назначение реквизитам и командам формы
Объекты, принадлежащие форме (Реквизиты и Команды), также можно задействовать в механизме функциональных опций.
Сделать это можно в редакторе формы, установив свойство Функциональные опции для требуемого объекта.
Состояние функциональных опций будет влиять на отображение объектов формы точно так же, как это происходит в случае объектов метаданных. Например, в случае с командой, отключенной с помощью функциональной опции, будут убраны все связанные с ней кнопки.
Если реквизиту формы или команде не назначена ни одна функциональная опция, то реквизит формы или команда считается видимым всегда. В противном случае реквизит формы или команда считается видимой, если хотя бы одна из назначенных ему функциональных опций является включенной.
Использование в механизме ограничения доступа к данным
В условиях механизма ограничения доступа к данным Функциональные опции могут использоваться точно так же, как и Параметры сеанса. Допустимо использовать только независящие от параметров опции, то есть те, которые привязаны к константам.
Определение значения функциональной опции
Значение функциональной опции определяется объектом, который указан в свойстве Хранение. В случае константы используется ее значение. Для опции, связанной с реквизитом справочника или ресурсом регистра сведений, – значения, хранящиеся в этих объектах. Для того чтобы найти конкретный объект, который хранит значение функциональной опции, необходима дополнительная информация – набор значений параметров функциональных опций.
Если опция хранится в реквизите справочника, параметр должен содержать ссылку на конкретный элемент справочника. Если опция хранится в ресурсе регистра сведений, должны быть указаны значения всех измерений регистра. В этом случае каждое измерение должно характеризоваться своим параметром.
Методы встроенного языка позволяют получить значение опции, как в зависимости от переданных параметров, так и для параметров, установленных для командного интерфейса или конкретной формы (подробнее смотрите раздел «Работа с функциональными опциями во встроенном языке» этой главы).
Если функциональная опция привязана к ресурсу периодического регистра сведений, то система использует срез последних для получения значения опции. Если требуется получать значение опции на какую-либо другую дату, необходимо указать значение для параметра функциональных опций Период (Period), имеющий тип Дата, который будет использоваться как дата получения среза. Этот параметр не нужно создавать в метаданных. Он предоставляется системой автоматически.
Управление значениями параметров функциональных опций
Значения параметров устанавливаются с помощью методов встроенного языка. При этом возможно разграничить область действия значения параметров. Параметры можно установить в рамках всего командного интерфейса и в рамках конкретного экземпляра формы.
Работа с функциональными опциями во встроенном языке
Методы работы с функциональными опциями можно разделить на две части:
- методы получения значения опции,
- методы работы с параметрами функциональных опций.
Работа со значениями функциональных опций
Методы глобального контекста ПолучитьФункциональнуюОпцию() и ПолучитьФункциональнуюОпциюИнтерфейса() возвращают значение функциональной опции. Разница между ними заключается в том, что первый метод позволяет указать набор параметров функциональных опций, а второй – возвращает значение функциональной опции исходя из параметров, заданных для командного интерфейса.
В управляемой форме есть свой метод, который возвращает значение опции для параметров, указанных в рамках формы, – ПолучитьФункциональнуюОпциюФормы().
Работа с параметрами функциональных опций
Методы работы с параметрами функциональных опций позволяют получать и устанавливать значения параметров функциональных опций для командного интерфейса или конкретной формы. Для установки значений параметров функциональных опций необходимо вызвать соответствующую функцию (УстановитьПараметрыФункциональныхОпцийИнтерфейса () или УстановитьПараметрыФункциональныхОпцийФормы ()), передав ей в качестве параметра структуру, ключ которой соответствует имени одного из параметров функциональных опций, а значение – значению параметра. Вызов вышеуказанных методов автоматически обновит соответствующую часть интерфейса.
Параметры не обязательно указывать все сразу, можно изменить значение конкретного параметра или набора параметров, выборочно. Но эффективнее осуществляется именно групповая установка значений одним вызовом.
Для получения значений параметров необходимо вызвать соответствующую функцию (ПолучитьПараметрыФункциональныхОпцийИнтерфейса () или ПолучитьПараметрыФункциональныхОпцийФормы ()), которая вернет установленные параметры в виде структуры, где ключом будет выступать имя параметра.
Фирма “1С” достаточно часто выпускает новые версии платформы. Среди них можно выделить версии-”прорывы” с принципиально новым функционалом. К таким можно отнести, например, платформу 8.3.11, в которой появилась возможность изменять структуру хранения данных при помощи расширений конфигурации.
А могут быть версии платформы не настолько революционные, но в которых появился полезный, ожидаемый функционал и в которых разработчики продолжают планомерное развитие механизмов платформы. И 8.3.16 как раз относится к таким релизам.
В курс Разработка расширений и технологии доработки конфигураций 1С без снятия с поддержки добавлено новое занятие, в котором подробно рассмотрены новшества платформы 8.3.16.
Мы решили поделиться этими видеоуроками не только со слушателями курса, но и со всеми нашими подписчиками 
Обзор новых возможностей платформы
Общая длительность всех видеоуроков – 1 час 6 минут.
Для того, чтобы Вам было проще ориентироваться в материале, мы указали тайминг наиболее важных моментов в видео.
Видео 1 – Введение
Видео 2 – Создание новых констант в расширении конфигурации
01:22 – Как создать константу в расширении
02:44 – Как создать форму констант в расширении
05:22 – Как работать с основной формой константы
05:47 – На что влияет галочка Использовать стандартные команды в свойствах константы.
Видео 3 – Назначение функциональных опций в расширениях конфигурации
00:30 – Зачем вообще нужны функциональные опции
03:29 – На что влияют и на что не влияют функциональные опции.
Видео 4 – Создание новых функциональных опций в расширении конфигурации
01:13 – Как создается функциональная опция в расширении
01:30 – Где указывается объект, предназначенный для хранения значения функциональной опции
02:16 – Какие объекты можно включать в состав функциональной опции в расширении
05:55 – Как обновить интерфейс при изменении значения функциональной опции
07:20 – Как в типовой конфигурации УТ 11 реализована работа с константами и обновление интерфейса при изменении значения функциональной опции
09:58 – Как реализовать собственную простую обработку для настройки функционала конфигурации
13:08 – Можно ли для хранения значения функциональной опции использовать константу, заимствованную из основной конфигурации.
Видео 5 – Модификация заимствованных функциональных опций
01:03 – Можно ли при помощи расширения изменить объект конфигурации, предназначенный для хранения значения функциональной опции?
02:03 – Как изменить состав заимствованной функциональной опции?
04:58 – Можно ли при помощи расширения удалить объекты из состава заимствованной функциональной опции?
Видео 6 – Создание новых параметров функциональных опций
00:33 – В каких случаях на практике используются параметры функциональных опций
06:59 – Как создать в расширении параметр функциональных опций и какие объекты к этому времени должны существовать в расширении
07:30 – Какие обработчики событий нужно реализовать для работы с параметрами функциональных опций в формах объектов
10:32 – При каких настройках функциональных опций в расширении конфигурации платформа падает.
Видео 7 – Создание новых критериев отбора
00:12 – Для чего используются критерии отбора
03:10 – Можно ли при помощи расширения изменить тип критерия отбора
04:00 – Можно ли при помощи расширения добавить в состав критерия отбора заимствованный объект
05:20 – Можно ли при помощи расширения добавить в состав критерия отбора объект, созданный в этом же расширении
05:55 – Как в пользовательском режиме проверить работоспособность критерия отбора, модифицированного при помощи расширения конфигурации
07:35 – Как создать новый критерий отбора в расширении
08:34 – Как в панели навигации формы создать ссылку для перехода к критерию отбора
09:24 – Какие ошибки возникают в пользовательском режиме при использовании критерия отбора, созданного в расширении конфигурации.
Видео 8 – Изменения в редакторе управляемой формы для расширений конфигурации
00:34 – Какие свойства в панели свойств выделяются цветом
01:28 – Как работает команда “Показывать только измененные” в панели свойств
01:53 – Как в дереве элементов формы отобразить только те элементы, которые изменены в расширении
Хотите научиться грамотно дорабатывать конфигурации при помощи расширений?
Еще больше возможностей по доработке и обновлению типовых конфигураций без снятия с поддержки – в нашем учебном курсе Разработка расширений и технологии доработки конфигураций 1С без снятия с поддержки.





























