Как функциональные опции включают и прячут части конфигурации 1С

· 9 мин

Содержание

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

Частое заблуждение: «выключили опцию — значит, данные защищены». Нет. Опция управляет только интерфейсом и составом прикладного решения на экране. Запрос, обработка или внешний отчёт по-прежнему прочитают и запишут скрытые данные. За доступ отвечают роли.

Суть механизма: чем опция отличается от прав доступа

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

Как это устроено:

  • 🔘 Хранилище — константа, реквизит справочника или ресурс регистра сведений. Там лежит значение опции.
  • 📦 Состав — список объектов метаданных, которые опция включает и выключает.
  • 🧩 Параметры — для опций, значение которых зависит от организации, склада или другого измерения.

Сравнение с ролями:

ПризнакФункциональная опцияРоль (права доступа)
На кого действуетНа всех пользователей информационной базы (или в разрезе параметра)На конкретного пользователя через его роли
Что делаетУбирает элементы из интерфейсаРазрешает или запрещает чтение, запись, проведение
Защищает данныеНетДа
Кто меняетОбычно администратор в режиме «Предприятие»Администратор в настройках пользователей или разработчик
Нужен ли КонфигураторДля создания — да, для переключения — нетДля создания роли — да

Хорошее правило: если вопрос звучит «нужна ли эта функция нашей фирме» — это опция. Если «можно ли этому сотруднику» — это роль.

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

Какими бывают функциональные опции

В свойствах объекта «Функциональная опция» есть поле Хранение. От него зависит тип опции.

Опция на константе

Самый частый вариант. Константа типа Булево, например ИспользоватьВалютныйУчет. Одно значение на всю базу. Включили — валютные реквизиты появились во всех документах.

Опция на реквизите справочника

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

Опция на ресурсе регистра сведений

Значение лежит в ресурсе регистра, измерения регистра становятся параметрами. Удобно, когда признак зависит от пары «организация + склад» или от другой комбинации.

Тип значения

Для управления видимостью используют тип Булево. Опцию можно связать и с константой другого типа, но тогда она служит для чтения значения из кода, а на интерфейс в привычном смысле «показать/скрыть» не влияет.

Свойство «Привилегированный режим при получении»

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

ХранениеПараметрыПример задачи
КонстантаНе нужныВалютный учёт, учёт по складам на всю базу
Реквизит справочникаСсылка на элементОсобенности учёта по каждой организации
Ресурс регистра сведенийИзмерения регистраНастройки по паре «организация + подразделение»

Как создать опцию и настроить видимость полей и команд

Создание в Конфигураторе занимает пару минут. Пример — опция «Использовать проекты», которая прячет реквизит «Проект» в документах.

  1. Создайте константу ИспользоватьПроекты типа Булево в ветке Константы.
  2. Откройте ветку Общие → Функциональные опции, добавьте новую.
  3. Задайте имя, например ИспользоватьПроекты, и синоним — его увидит разработчик в подсказках.
  4. В поле Хранение выберите Константа.ИспользоватьПроекты.
  5. Откройте Состав и отметьте галочками: справочник «Проекты», реквизит «Проект» в нужных документах, реквизит в табличных частях, если он там есть.
  6. Установите флаг Привилегированный режим при получении.
  7. Обновите конфигурацию базы данных (F7).

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

Что можно включить в состав

  • 📄 объекты метаданных целиком: справочники, документы, отчёты, обработки, регистры;
  • 🏷️ реквизиты объектов, табличные части и их реквизиты;
  • 📊 измерения, ресурсы и реквизиты регистров;
  • ⚙️ общие команды и команды объектов.

Реквизиты и команды формы

У реквизитов формы и команд формы есть собственное свойство Функциональные опции. Там выбирают одну или несколько опций. Это нужно для того, что не связано с метаданными напрямую: служебный реквизит формы, кнопка «Заполнить по проекту». Если выбраны несколько опций, элемент виден, когда включена хотя бы одна из них.

Свойство Видимость = Истина из кода не покажет элемент, скрытый выключенной опцией. Опция главнее. Если поле «не появляется, хотя видимость включена» — сначала проверьте опции.

Как спланировать набор опций до разработки

Ошибки в опциях дорого исправлять, когда база уже работает. Перед созданием ответьте себе на три вопроса:

  1. Какую бизнес-функцию включает опция? Имя должно читаться как вопрос «используем ли мы…»: ИспользоватьПроекты, ИспользоватьСерииНоменклатуры. Имя по техническому признаку («ПоказыватьПоле5») через год никто не поймёт.
  2. Зависит ли признак от организации или склада? Если да, сразу закладывайте хранение в справочнике или регистре с параметром. Переделывать константу в параметризованную опцию придётся вместе со всем кодом, который её читает.
  3. Можно ли выключить функцию, когда данные уже есть? Если нет, на форме настроек блокируйте флажок при наличии документов, как это сделано в типовых конфигурациях. Иначе пользователь спрячет реквизит с заполненными значениями и потеряет их из виду.

Как опции управляют разделами и подсистемами

Раздел интерфейса «Такси» — это подсистема верхнего уровня. Отдельно прятать его обычно не нужно. Если все объекты и команды подсистемы выключены опциями, раздел пустеет, и платформа не показывает его на панели разделов.

Пример. Подсистема «Производство» содержит документы выпуска, спецификации и отчёты. Все они входят в состав опции ИспользоватьПроизводство. Выключили константу — пропали и документы, и сам раздел «Производство».

Чтобы схема работала, соблюдайте два условия:

  1. В подсистеме не должно остаться объектов вне состава опции. Один забытый отчёт удержит раздел на экране.
  2. Общие команды, включённые в подсистему, тоже добавьте в состав опции или привяжите к ней.

Если раздел не исчезает, откройте подсистему в Конфигураторе, посмотрите её состав и сверьте с составом опции. Обычно причина — один объект, который забыли отметить.

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

В режиме «Предприятие» опции меняют через формы настроек. Флажки на этих формах — это константы, за которыми стоят функциональные опции.

КонфигурацияГде включать функциональность
Бухгалтерия предприятия 3.0Главное → Настройки → Функциональность
ЗУП 3.1Настройка → Кадровый учёт, Настройка → Расчёт зарплаты
Управление торговлей 11НСИ и администрирование → Настройка НСИ и разделов

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

Программное управление и проверка условий

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

Чтение простой опции

Если ПолучитьФункциональнуюОпцию("ИспользоватьПроекты") Тогда
    Движение.Проект = Объект.Проект;
КонецЕсли;

Чтение опции с параметром

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

Параметры = Новый Структура("Организация", Объект.Организация);
РаздельныйУчет = ПолучитьФункциональнуюОпцию("ВестиРаздельныйУчет", Параметры);

Параметры для формы

Чтобы видимость полей в форме зависела от выбранной организации, параметр устанавливают самой форме:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    УстановитьПараметрыФункциональныхОпцийФормы(
        Новый Структура("Организация", Объект.Организация));
КонецПроцедуры

При смене организации в форме вызовите эту же процедуру ещё раз из серверного обработчика. Поля перестроятся под новую организацию.

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

Применить изменения без перезапуска

Пользователь снял флажок на форме настроек — интерфейс сам не перестроится. В типовых конфигурациях после записи константы на клиенте вызывают:

ОбновитьИнтерфейс();

Метод перерисовывает командный интерфейс и открытые формы с учётом новых значений.

Методы, которые стоит знать

МетодГде вызыватьЧто делает
ПолучитьФункциональнуюОпцию()Сервер, клиентВозвращает значение опции, при необходимости с параметрами
ПолучитьФункциональнуюОпциюИнтерфейса()КлиентЗначение с учётом параметров интерфейса сеанса
ПолучитьФункциональнуюОпциюФормы()Модуль формыЗначение с учётом параметров формы
УстановитьПараметрыФункциональныхОпцийФормы()Модуль формыЗадаёт параметры для этой формы
ОбновитьИнтерфейс()КлиентПерестраивает интерфейс после изменений

Частые ошибки при работе с опциями

  • ❌ Опцию используют вместо прав. Поле скрыто, но внешняя обработка или отчёт с произвольным запросом по-прежнему покажет данные. Для ограничения доступа нужна роль или RLS.
  • ❌ Одна опция на всё. Опция «Использовать расширенный учёт» с полусотней объектов в составе неудобна: пользователю нужна половина, а включить можно только всё сразу. Делите по смыслу.
  • ❌ Опция выключена, а код работает так, будто она включена. Интерфейс скрыл реквизит, а проведение по-прежнему пишет его в движения пустым значением. Проверяйте опцию в коде проведения и отчётов.
  • ❌ Нет флага привилегированного режима. У пользователей с урезанными ролями поля пропадают, у администратора — нет. Выглядит как плавающая ошибка.
  • ❌ Правки в типовых опциях. Меняя состав типовой опции прямо в конфигурации поставщика, вы снимаете её с полной поддержки и усложняете обновления. Свою опцию и её состав лучше вынести в расширение, если позволяет версия платформы.
Диагностика: выберите симптом

Частые вопросы

Можно ли включить функциональную опцию только для одного пользователя?
Нет. Опция действует на всю базу или в разрезе параметра (организация, склад). Для разделения по пользователям используют роли и персональные настройки форм.
Ускоряет ли выключение опций работу базы?
Заметно — нет. Таблицы и реквизиты остаются в базе данных, меняется только интерфейс. Выигрыш — в удобстве: меньше лишних полей и пунктов меню.
Пропадут ли данные, если выключить опцию?
Нет. Данные остаются в таблицах. Включите опцию снова, и поля покажут прежние значения.
Чем функциональная опция отличается от обычной константы?
Константа просто хранит значение. Опция добавляет к нему состав объектов и автоматически управляет их видимостью в интерфейсе.
Можно ли создать функциональную опцию в расширении?
Да, функциональные опции можно добавлять в расширение конфигурации и включать в их состав собственные объекты расширения. Возможности по заимствованным объектам зависят от версии платформы.