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С:Предприятие.
Платформа при этом будет автоматически включать и выключать отображение всех соответствующих элементов интерфейса (полей, команд, колонок списков, элементов отчетов). В нашем случае — будет скрываться или отображаться поле Склад
во всех формах документа Поступление товара
.
Практически все типовые решения на платформе 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. Общая схема работы
Механизм функциональных опций включает в себя два типа объектов метаданных: Функциональная опция
и .
Функциональная опция представляет собой объект метаданных, который может непосредственно влиять на состав интерфейса приложения (если функциональная опция хранит свое значение в реквизите типа Булево
). С помощью объектов этого типа можно скрыть элементы, которые относятся к недоступной функциональности. Например, опция Валютный учет
может скрыть справочник Валюты, поле Валют
а из документов, колонку Валютная сумма
из отчетов. Источником значения функциональной опции является объект метаданных, выбранный в качестве свойства Хранение,
например, это
может быть константа.
В случае хранения значения функциональной опции в реквизите справочника или ресурсе регистра сведений требуется дополнительная информация, которая указывает на то, как именно выбрать значение опции. Для этой цели предусмотрен отдельный объект метаданных – Параметры функциональных опций
.
Можно сказать, что параметры функциональных опций являются осями координат пространства значений функциональных опций. Причем один параметр функциональных опций может определять значение «своей» оси координат одновременно для множества функциональных опций.
Рис. 2. Параметризуемая функциональная опция
Рассмотрим пример: допустим, суммовой учет зависит от склада, принадлежащего конкретной организации (см. рис.98). В нашей информационной базе
можно вести учет от имени разных организаций и на разных складах.
Для хранения значений функциональных опций создадим регистр сведений, где измерениями (осями координат) будут:
● Организация
(соответствующего типа);
● Склад
(соответствующего типа).
Ресурсом регистра сведений будет значение функциональной опции суммового учета.
Тогда общая структура конфигурации будет выглядеть следующим образом:
● Регистр сведений СуммовойУчет
:
● измерение Организация
;
● измерение Склад
;
● ресурс СуммовойУчет
, имеющий тип Булево.
● Параметр функциональных опций Организация
. Свойство Использование
указывает на измерение Организация
регистра сведений СуммовойУчет
.
● Параметр функциональных опций Склад
. Свойство Использование
указывает на измерение Склад
регистра сведений СуммовойУчет
.
● Функциональная опция СуммовойУчет
. Свойство Хранение
указывает на ресурс СуммовойУчет
регистра сведений СуммовойУчет
.
В результате для того, чтобы определить необходимость ведения суммового учета, нам необходимо в каждом конкретном случае указать значения параметров функциональных опций (Организация
и Склад
) и получить значение функциональной опции.
Так, в примере, показанном на рис.2, для Организации 1
и Склада 1
суммовой учет
разрешен, а для Организации 2
и Склада 1
суммовой учет запрещен.
4. Взаимодействие с другими объектами
Функциональные опции могут быть назначены следующим объектам конфигурации:
● Подсистемы,
● Общие команды,
● Общие формы,
● Константы,
● Критерии отбора,
● Справочник,
● Документ,
● Журнал,
● План счетов,
● План видов характеристик,
● План видов расчета,
● Бизнес-процесс,
● Задача,
● Планы обмена,
● Отчет,
● Обработка,
● Регистр накопления,
● Регистр сведений,
● Регистр бухгалтерии,
● Регистр расчета,
● Команда,
● Реквизит объекта метаданных,
● Табличная часть,
● Реквизит табличной части,
● Признак учета,
● Признак учета субконто,
● Реквизиты адресации,
● Измерение регистра,
● Ресурс регистра.
Также функциональные опции могут влиять на видимость элементов формы.
5. Создание
5.1. Создание функциональной опции
Для того чтобы создать функциональную опцию, необходимо создать объект конфигурации Функциональная опция. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие
, далее Функциональные опции и добавить новый объект.
Рис. 3. Создание функциональной опции
В результате будет создан объект конфигурации Функциональная опция, который можно использовать для назначения функциональных опций другим объектам метаданных.
Рис. 4. Хранение значения функциональной опции
Кроме имени объект имеет обязательное для заполнения свойство – Хранение. В редакторе для него можно выбрать один из объектов, который будет являться источником значения опции. В список доступных объектов входят:
● константы,
● реквизиты справочников,
● ресурсы регистров сведений.
Ограничение на тип источника значения опции нет, но для управления интерфейсом пригодны только те функциональные опции, которые хранят свои значения в реквизитах, имеющих тип Булево. Значения функциональных опций с другими типами доступны только для анализа на встроенном языке.
Свойство Привилегированный режим при получении отвечает за способ получения (и кеширования) значения функциональной опции.
Рис. 5. Привилегированный режим при получении значения функциональной опции
Если данное свойство установлено, то значение функциональной опции получается в привилегированном режиме. Полученное значение кешируется для всех сеансов, связанных с данной информационной базой.
Если свойство Привилегированный режим при получении сброшено, то получение значения функциональной опции выполняется в обычном режиме.
Кеширование выполняется для текущего сеанса. Кешируется как значение (если его удалось получить), так и признак невозможности получения значения (в том случае, если значение получить не удалось).
Кеш сбрасывается при изменении значений параметров сеанса.
СОВЕТ
. Рекомендуется устанавливать свойство Привилегированный режим при получении для всех случаев, когда значение функциональной опции не содержит конфиденциальную информацию.
5.2. Создание параметра функциональных опций
Для того чтобы создать параметр функциональной опции, необходимо создать объект конфигурации Параметры функциональных опций
. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие
, далее Параметры функциональных опций
и добавить новый объект.
Кроме имени, параметр имеет обязательное свойство Использование
. В нем указывается набор объектов, значения которых будут определять то, как следует выбирать значение функциональной опции. В список доступных объектов входят справочники и измерения регистра сведений. Для каждого параметра функциональных опций в данном списке можно выбрать один справочник (из всего перечня справочников) и по одному измерению каждого регистра сведений.
ВНИМАНИЕ!
Нельзя использовать один и тот же объект метаданных в нескольких параметрах функциональных опций.
6. Использование
6.1 Назначение объектам метаданных
Объект метаданных (например, справочник) можно отнести к одной или нескольким функциональным опциям. Для этого служит свойство Функциональные опции, которое содержит ссылки на созданные в конфигурации функциональные опции.
Рис. 6. Назначение функциональной опции объекту
Список доступных опций ограничен только теми опциями, для которых в свойстве Хранение назначен объект с типом значения Булево
.
ВНИМАНИЕ!
Если объекту не назначена ни одна функциональная опция, то он считается видимым всегда. В противном случае объект считается видимым, если хотя бы одна из назначенных ему функциональных опций является включенной (т. е. функциональные опции сочетаются «по ИЛИ»).
6.2. Назначение реквизитам и командам формы
Объекты, принадлежащие форме (Реквизиты и Команды), также можно задействовать в механизме функциональных опций.
Рис. 7. Назначение функциональной опции команде
Сделать это можно в редакторе формы, установив свойство Функциональные опции для требуемого объекта.
Состояние функциональных опций будет влиять на отображение объектов формы точно так же, как это происходит в случае объектов метаданных.
Например, в случае с командой, отключенной с помощью функциональной опции, будут убраны все связанные с ней кнопки.
Если реквизиту формы или команде не назначена ни одна функциональная опция, то реквизит формы или команда считается видимой всегда. В противном случае реквизит формы или команда считается видимой, если хотя бы одна из назначенных ему функциональных опций является включенной.
6.3. Использование в механизме ограничения доступа к данным
В условиях механизма ограничения доступа к данным Функциональные опции
могут использоваться точно так же, как и Параметры сеанса
. Допустимо использовать только не зависящие от параметров опции, то есть те, которые привязаны к константам.
ВНИМАНИЕ! Системой контролируется уникальность имен между параметрами сеанса и функциональными опциями.
6.4. Определение значения функциональной опции
Значение функциональной опции определяется объектом, который указан в свойстве Хранение. В случае константы используется ее значение. Для опции, связанной с реквизитом справочника или ресурсом регистра сведений, – значения, хранящиеся в этих объектах. Для того чтобы найти конкретный объект, который хранит значение функциональной опции, необходима дополнительная информация – набор значений параметров функциональных опций.
Если опция хранится в реквизите справочника, параметр должен содержать ссылку на конкретный элемент справочника. Если опция хранится в ресурсе регистра сведений, должны быть указаны значения всех измерений регистра. В этом случае каждое измерение должно характеризоваться своим параметром.
Если для функциональной опции, имеющей тип Булево, заданы не все параметры, то выполняется сложение «по ИЛИ» всех значений с не заданными параметрами. Например, если функциональная опция хранится в регистре сведений с измерениями Организация
и Склад
и задано только измерение Организация
, то значение функциональной опции будет равно Истина, если хотя бы у одного из складов, перечисленных в измерении Склад
, значение функциональной опции будет равно значению Истина.
Для функциональной опции, имеющий тип, отличный от Булево
, ситуация с не полностью заданными параметрами приводит к генерации исключения.
Методы встроенного языка позволяют получить значение опции, как в зависимости от переданных параметров, так и для параметров, установленных
для командного интерфейса или конкретной формы. В том случае, когда изменение значения объекта, указанного в свойстве функциональной опции Хранение
, выполняется в транзакции, собственно значение функциональной опции будет изменено только после завершения транзакции. Пока открыта транзакция – значение функциональной опции будет равно значению, актуальному на момент начала транзакции.
Если функциональная опция привязана к ресурсу периодического регистра сведений, то система использует срез последних для получения значения опции. Если требуется получать значение опции на какую-либо другую дату, необходимо указать значение для параметра функциональных опций Период
(Period), имеющий тип Дата
, который будет использоваться как дата получения среза. Этот параметр не нужно создавать в метаданных. Он предоставляется системой автоматически.
При использовании параметризованных функциональных опций следует учитывать следующие особенности поведения:
● В формах списков колонка реквизита, связанного с параметризованной функциональной опцией, будет отображаться, если в информационной базе хранится хотя бы одно включенное значение данной функциональной опции.
● Если необходимо, чтобы при открытии формы реквизиты, связанные с функциональными опциями, были отключены по умолчанию, то нужно
установить значения этих параметров в значения, отсутствующие в информационной базе (для справочников – пустая ссылка, для регистров сведений – значения измерений, для которых нет записей). В этом случае функциональная опция будет иметь значение Ложь
.
● В том случае, когда в качестве параметра указана ссылка на группу (если типа параметра функциональной опции допускает создание групп), а не ссылка на элемент, поведение системы будет следующим:
● если реквизит, в котором хранится значение функциональной опции, используется как для элемента, так и для группы, то значение функциональной опции будет определяться значением этого реквизита.
● если реквизит, в котором хранится значение функциональной опции, не используется для группы, то при получении значения функциональной опции c помощью методов ПолучитьФункциональнуюОпцию
(), () и () будет возращено значение NULL
. Если, параметризованная таким значением, функциональная опция оказывает влияние на пользовательский интерфейс, то система будет воспринимать ее как выключенную (функциональная опция будет иметь значение Ложь
).
● Для командообразующих объектов метаданных возможно установить привязку к параметризованной функциональной опции. В командном интерфейсе команды таких объектов будут отображаться только в том случае, если есть хотя бы одна комбинация параметров функциональных опций, при которых значение функциональной опции равно Истина
. Однако с помощью метода () можно задать конкретные значения параметров функциональных опций, и тогда видимость
команд будет определяться именно заданными параметрами.
● Динамический список автоматически использует функциональные опции, используемые формой. Если реквизиты, которые используются в запросе динамического списка, будут отключены при заданной комбинации параметров функциональных опций, данные по ним не будут выбраны и отображены в динамическом списке, а реквизит будет удален из списков доступных реквизитов в диалоге настройки отображения данных
динамического списка (в режиме 1С:Предприятие).
7. Работа с функциональными опциями во встроенном языке
Методы глобального контекста ПолучитьФункциональнуюОпцию()
и ПолучитьФункциональнуюОпциюИнтерфейса
() возвращают значение функциональной
опции. Разница между ними заключается в том, что первый метод позволяет указать набор параметров функциональных опций, а второй – возвращает значение функциональной опции исходя из параметров, заданных для командного интерфейса. В форме есть свой метод, который возвращает значение опции для параметров, указанных в рамках формы, – ПолучитьФункциональнуюОпциюФормы
().
Для обновления глобального командного интерфейса следует явным образом вызывать метод УстановитьПараметрыФункциональныхОпцийИнтерфейса
().
Командный интерфейс будет обновлен с учетом нового состояния функциональных опций.
ПРИМЕЧАНИ
Е. Если значение функциональной опции изменяется в базе данных, то автоматического обновления глобального командного интерфейса и открытых в это время форм не происходит. Для этого следует использовать метод ОбновитьИнтерфейс() после записи значений функциональных опций в базу данных.
Следует помнить, что установка параметров функциональных опций (и выполнение метода ОбновитьИнтерфейс
()) приводит к следующим последствиям:
● для каждой формы вызывается закрытие всех вспомогательных форм (с вызовом соответствующих обработчиков);
● формы, отказавшиеся от закрытия, не закрываются;
● происходит обновление состава элементов основной формы;
● если на момент обновления интерфейса активной формой была основная, происходит отображение основной формы в соответствии с новым составом элементов;
● если на момент обновления интерфейса активной формой была вспомогательная форма, то:
● будет выполнена команда открытия вспомогательной формы, если после обновления интерфейса она является доступной;
● в противном случае обновляется состав элементов основной формы и выполняется ее отображение;
● если на момент обновления интерфейса активной формой была вспомогательная форма, открытая с помощью команды, не относящейся к панели навигации формы, то вместо этой формы будет обновлен состав элементов основной формы и выполнено ее отображение.
Для того чтобы обновить конкретную форму, следует либо заново открыть ее, либо вызвать метод УстановитьПараметрыФункциональныхОпцийФормы(),
при этом вышеописанная последовательность действий отрабатывает только для той формы, в контексте которой вызвана установка параметров функциональных опций формы.
Параметры не обязательно указывать все сразу, можно изменить значение конкретного параметра или набора параметров выборочно. Но эффективнее осуществляется именно групповая установка значений одним вызовом.
Для получения значений параметров необходимо вызвать соответствующую функцию (ПолучитьПараметрыФункциональныхОпцийИнтерфейса
() или
ПолучитьПараметрыФункциональныхОпцийФормы()), которая вернет установленные параметры в виде структуры, где ключом будет выступать имя параметра.
При открытии форма автоматически использует параметры функциональных опций, установленных для командного интерфейса.
Функциональные опции
– это одна из новых возможностей платформы 1С:Предприятие 8.2. Смысл их использования заключается в том, что они позволяют настраивать пользовательский интерфейс
в соответствии с настройками функциональных опций, задавать видимость реквизитов в формах. Кроме того, разработчик имеет возможность реализовывать программный код, выполнение которого зависит от состояния функциональной опции.
Создадим функциональную опцию, которая позволяет включать и отключать ведение расчета заработной платы в конфигурации. С ее помощью мы сможем быстро скрывать те части интерфейса, которые относятся к решению расчетных задач. Функциональная опция
сама по
себе не хранит какого-либо значения, которое позволяет ее включать и отключать. Обычно для хранения состояния функциональной опции используют константу, хотя она может быть привязана и к другому объекту, например – к реквизиту какого-либо объекта.
Создадим новую константу, назовем ее УчетЗарплаты
, тип – Булево
. Включим константу в подсистему Администрирование
и в форму констант для того, чтобы мы могли редактировать ее. Кроме того, в форме констант зададим обработчик ПослеЗаписи
следующего вида:
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
ОбновитьИнтерфейс();
КонецПроцедуры
Смысл использования команды ОбновитьИнтерфейс()
заключается в том, чтобы после вступления в силу изменения константы
, связанной с функциональной опцией, обновить, перерисовать интерфейс
. Иначе для того, чтобы изменения вступили в силу, придется перезапускать конфигурацию.
Создадим новую функциональную опцию, назовем ее УчетЗарплаты
, на закладке Основные
, в параметре Хранение
укажем только что созданную константу, рис.
7.23 . Включим функциональную опцию в подсистему Администрирование
.
Рис.
7.23.
Теперь перейдем на закладку окна настройки функциональной опции Состав
и выберем все (
рис.
7.24), что относится к расчету заработной платы. Если какие-либо объекты, например, справочники, относятся к различным частям конфигурации, не будем их отмечать, иначе при выключении функциональной опции они «исчезнут» из интерфейса.
Рис.
7.24.
Выбор подсистемы РасчетЗаработнойПлаты
в данном случае не ведет к автоматическому выбору всех объектов, включенных в подсистему. При выборе мы лишь подразумеваем скрытие или отображение
раздела командного интерфейса РасчетЗаработнойПлаты
.
Запустив систему в пользовательском режиме, мы сможем включать и отключать видимость объектов, относящихся к зарплатной подсистеме нашей конфигурации, просто устанавливая или снимая флаг у константы
УчетЗарплаты
.
Более сложный вариант использования
функциональных опций заключается в настройке видимости отдельных элементов форм в том случае, если значение
функциональной опции хранится в реквизите какого-либо объекта.
Внесем изменения в конфигурацию, в частности, в справочник ФизическиеЛица
добавим реквизит
логического типа ИмеетОпытКадровойСлужбы
и разместим его на форме элемента справочника.
С выходом платформы «1С:Предприятие 8.2» в дереве конфигурациипоявился новый объект – «Функциональные опции»
. Он активно применяется во всех типовых конфигурациях, основанных на управляемых формах, и служит для упрощения процесса отображения отдельных реквизитов, объектов в интерфейсе. Например, в вашей конфигурации есть модуль для обмена с внешним веб-сервисов. Это модуль задействует ряд реквизитов в документах, регистрах и отдельные компоненты в подсистемах. Модуль является опциональным и необходим не каждой компании. Логично, раз модуль нужен не всем, то и отображать вся связанные с ним элементы/поля тоже нужно не всегда.
В старых версиях платформы, решение подобных задач требовало написание дополнительного кода, который приходилось вызывать во всех зависимых участках. Например, если нам требовались скрыть определенные реквизиты формы (в зависимости от значения настройки), то требовалось вызывать соответствующий код при открытии формы. Это было не очень удобно и в большинстве случаев разработчики на подобные вещи забивали.
Хорошо, если требуется скрыть только поля в форме документов, а ведь у нас же еще могут формы регистров, с которыми также возможно взаимодействие пользователя. Написать универсальную функцию управлением отображением довольно сложно и потребует дополнительного времени, которого никогда не хватает.
Функциональные опции призваны решить эту и многие другие сложности, связанные с отображением элементов интерфейса/состава доступных объектов в пользовательском интерфейсе. В этой заметке я не буду рассматривать примеры использования основного назначения функциональных опций, а обращу внимание на применение их не совсем стандартным образом. Возможно, он знаком многим продвинутым разработчикам, но я к такому способу пришел совершенно случайно. Точней он был навеян практикой программирования на JavaScript.
Кейс №1: функциональная опция как обертка над другими объектами
Первая нестандартная фишка функциональных опций – возможность создавать обертки. Рассмотрим самый простейший пример – константы. Например, вы добавляете новую константу в конфигурацию с огромным количеством пользовательских ролей. Чтобы пользователи могли обращаться к значению константы вам необходимо установить соответствующим ролям права на чтение. Если права не выставить, то пользователи не смогут получить ее значение. Если ролей много и они не наследуются от базовой роли, то придется потратить время на простановку соответствующих флажков.
Функциональная опция может решить эту проблему более элегантно. Идея в следующем: создаем константу (например, ). Права на нее не назначаем. Создаем одноименную функциональную опцию и указываем в свойстве «Хранение»
указываем константу «ВозможностьСохраненияДанных»
. Также устанавливаем флаг «Привилегированный режим при получении»
.
Все, теперь в любом месте кода, где требуется обратиться к константе пишем так:
Поскольку мы установили для опции привилегированный режим, то никаких дополнительных прав для константы указывать не нужно. Конечно, не нужно применять данную технику во всех случаях мыслимых и немыслимых ситуациях. Помните, грамотная расстановка прав – залог спокойствия. Используйте трюк только в действительно необходимых случаях.
Кейс №2. Дополнительный уровень абстракции
Не знаю, как правильней назвать этот способ, но в моем представлении он звучит именно так. Рассмотрим предыдущий пример. Есть у нас все та же константа «Возможность сохранения данных». Мы работаем с ней, используя одноименную функциональную опцию в качестве обертки.
Теперь представим, что нам захотелось избавиться от константы и перейти на использования справочника. Типичный сценарий решения такой задачи (если мы используем только константу) будет запуск инструмент глобального поиска с целью обнаружения обращения к константе. Напомню, если мы не используем функциональную опцию в качестве обертки, то константе мы должны обращаться так:
Константы.ВозможностьСохраненияДанных.Получить();
Находим все вызовы и заменяем на путь к новому объекту хранения. Согласитесь, это довольно неудобно. Если мы воспользовались предыдущем кейсом (применение функциональной опции в качестве обертки), то для «переезда» нам потребуется только зайти в свойства функциональной опции и изменить свойство «Хранение»
. Например, указать там «Справочник»
или «Регистр сведений»
. Никаких игр с глобальным поиском не потребуется. Код обращения к значению константы через функциональную опцию останется прежним:
ПолучитьФункциональнуюОпцию(«ВозможностьСохраненияДанных»);
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.21.14) Для загрузки кассовых документов написана внешняя обработка. Под пользователем с полными правами выполняется нормально, а под пользователем с включенным профилем «Главный бухгалтер» + профиль, в котором включено использование внешних обработок, права ко всем организациям, выдается ошибка Вот это выдается пользователю. ============================ Проблема Приходный кассовый ордер от 03.06.2013 8:03:17 {ВнешняяОбработка.ДополнительныеВозможностиБухТЭСК_Управляемая.МодульОбъекта}: Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика — ‘ПередЗаписью’: {ОбщийМодуль.ОбновлениеИнформационнойБазы.Модуль}: Ошибка при вызове метода контекста (Выполнить): Недостаточно прав для работы с таблицей «РегистрСведений.ВерсииПодсистем» Вот это пишется в журнал ========================== {ОбщийМодуль.ОбменДаннымиВызовСервера.Модуль}: Ошибка при вызове метода контекста (ПолучитьФункциональнуюОпцию) АктуальнаяДата = ПолучитьФункциональнуюОпцию(«АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО»); по причине: Ошибка при получении значения функциональной опции «АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО». Нет доступа: объект: ‘Константа.ДатаОбновленияПовторноИспользуемыхЗначенийМРО’ Таблица: ‘Const10560’, SDBL-команда: ‘SELECT’. Часть кода внешней обработки // это в модуле формы Интерактивно этот пользователь документы создавать может.
и ? сам же написал. Недостаточно прав для работы с таблицей «РегистрСведений.ВерсииПодсистем» исправь права и грузи
Лол в том, что буху придется давать права администратора.
Я использую свой спец модуль для записи объекта. Запись происходит при установленном привилегированном режиме.
Не рекомендуются. Хотя я все таки дал. ибо система прав не очень разумна.
Тут интересно, а ручками пользователь с профилем Главный бухгалтер тоже не может провести ПКО что ли?
Непонятный вопрос. Там вывоз перед записью, а не при проведении доков. Если мне не изменяет память вот в чем косяк: Из формы внешней обработины не видны параметры сеанса и соот-но на куче всякой хрени обработки падают.
Я в первом сообщении писал: Интерактивно этот пользователь документы создавать может. Похоже что прав. Поищу в этом направлении. А вообще там в процедурах, где выпадает ошибка стоит УстановитьПривилегированныйРежим(Истина) но оно не срабатывает, хотя модули выполняются на сервере в тонком клиенте.
Ну проверь что безопасный режим ложь, плюс я все таки пишу объект в отдельной общем модуле. Причем функция универсальная. она просто делает запись объекта и все, ес-но в привилегированном режиме
Процедуры, о которых я писал в — родные 1С-овские. Привилегированный режим почему-то не устанавливается. В конфигурацию вмешиваться — табу, только внешними обработками.
Почему табу? Никаких проблем с обновлением, ведь конфа на поддержке. а общий модуль он твой, отдельно от поставки.
Сейчас на тестовой БД проверил. Не изменял ничего, просто включил обработку в конфигурацию и дал на нее права. Все работает. Похоже, что когда серверные процедуры/функции вызываются из внешней обработки, тогда не работает установка привилегированного режима. То ли ошибка, то ли так задумано.
я же тебе в еще в написал
Тэги: 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
сообщений
Показывать по
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
сообщений
Читают тему:
Показывать по
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
сообщений
Читают тему: