К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как работает функциональная опция в 1С

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

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

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

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

Где хранятся значения функциональных опций

Каждая функциональная опция привязана к источнику данных. Самый распространённый вариант — константа с типом «Булево»: значение «Истина» означает включённую опцию. Имя константы обычно совпадает с именем опции, что упрощает поиск связи в конфигураторе.

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

Как опция управляет интерфейсом и кодом

В свойствах функциональной опции есть таблица «Состав» — в ней перечислены объекты метаданных, которыми управляет опция: справочники, документы, реквизиты, команды, подсистемы. Когда опция выключена, платформа скрывает эти объекты из командного интерфейса, панелей разделов и стандартных команд открытия списков. Данные при этом физически остаются в базе — документы не удаляются, проводки не стираются.

Важно понимать ограничение: скрытие — это не запрет. Если у пользователя есть права на объект, он может открыть его через «Все функции», по ссылке из другого документа или через отчёт. Поэтому функциональная опция не заменяет настройку прав доступа (роли и RLS), а дополняет её на уровне удобства интерфейса.

В программном коде значение опции проверяют явно:

bsl
Если ПолучитьФункциональнуюОпцию("ВестиУчетПоНесколькимСкладам") Тогда
    // логика для многоскладского учета
Иначе
    // упрощенная логика
КонецЕсли;

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

Где включить опцию в типовой конфигурации

В типовых решениях (1С:Бухгалтерия, Управление торговлей, ERP, ЗУП) функциональные опции собраны в разделе настроек. Обычно это «Администрирование» с подразделами вроде «Настройка параметров учёта», «Общие настройки», «Организация и финансы». Флажки там — это и есть функциональные опции, привязанные к константам.

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

Как включить опцию в типовой конфигурации
  1. 1
    Откройте раздел «Администрирование» и найдите нужную настройку через поиск или по подразделам.
  2. 2
    Установите или снимите флажок — значение сохраняется сразу, без перезапуска программы.
  3. 3
    Обновите интерфейс (закройте и откройте раздел либо перезапустите сеанс), чтобы увидеть изменения в меню.
  4. 4
    Проверьте, что нужные документы и справочники появились в панели разделов, а у остальных пользователей интерфейс обновился после перезахода.

Как создать свою функциональную опцию в конфигураторе

Создание собственной опции начинается с источника данных. Добавьте константу с типом «Булево» — она будет хранить значение. Затем в ветке «Общие → Функциональные опции» создайте новый объект, задайте имя и в свойстве «Хранение» укажите эту константу.

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

Если опция должна зависеть от контекста, вместо константы используйте регистр сведений. Например, для опции, различающейся по организациям, создайте регистр сведений с измерением «Организация» и ресурсом типа «Булево», укажите его в свойстве «Хранение», а в коде вызывайте ПолучитьФункциональнуюОпцию("ИмяОпции", Новый Структура("Организация", ОрганизацияСсылка)).

Типичные проблемы и их причины

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

Обратная ситуация — опцию выключили, а документы остались видны. Здесь проверяют, не открывается ли объект через связанные механизмы: подчинённые документы, ввод на основании, отчёты. Скрытие по опции не блокирует эти пути. Также стоит проверить, не хранится ли опция в регистре с параметрами: если значение установлено для одной организации, для другой опция может быть включена.

Типичные ошибки
01
Считать функциональную опцию механизмом разграничения прав — скрытый объект всё равно доступен через «Все функции», поэтому безопасность обеспечивают роли.
02
Выключать опцию в рабочей базе без проверки данных — введённые ранее документы останутся, но станут невидимыми в интерфейсе, что запутает пользователей.
03
Дублировать проверку опции в десятках модулей вместо одной функции в общем модуле — при переименовании опции придётся править весь код.
04
Привязывать к опции объекты, участвующие в обменах, без анализа последствий — скрытый справочник продолжит синхронизироваться, что может привести к расхождениям.

Как проверить, что опция работает правильно

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

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

Контрольные точки

Как проверить результат

Видимость раздела в панели навигации
Норма

Раздел появился после включения и перезахода пользователя

Тревожный признак

Раздела нет — проверьте права и состав опции

Значение из кода
Норма

ПолучитьФункциональнуюОпцию возвращает ожидаемое значение

Тревожный признак

Возвращается Ложь при включённом флажке — проверьте привязку хранения

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

Поле скрыто при выключенной опции

Тревожный признак

Поле видно — реквизит не добавлен в состав опции

FAQ

Чем функциональная опция отличается от константы?

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

Удалятся ли данные, если выключить функциональную опцию?

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

Почему после включения опции пользователь не видит новый раздел?

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

Можно ли сделать опцию разной для разных организаций?

Да. Значение хранят в регистре сведений с измерением «Организация», указывают регистр в свойстве «Хранение» опции, а в коде передают организацию параметром в ПолучитьФункциональнуюОпцию.

Заменяет ли функциональная опция настройку прав доступа?

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

Как узнать, какие объекты связаны с конкретной опцией?

В конфигураторе откройте функциональную опцию и посмотрите вкладку «Состав». Обратный поиск — через свойства объекта метаданных: там видно, в состав каких функциональных опций он входит.

Итог

Что важно запомнить

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