Как функциональные опции включают и прячут части конфигурации 1С
Содержание
Функциональная опция в 1С — это объект метаданных из ветки Общие → Функциональные опции, который связывает хранимое значение (обычно константу типа Булево) с набором объектов, реквизитов и команд. Значение Истина — эти объекты видны в интерфейсе. Ложь — платформа убирает их из меню, форм и разделов у всех пользователей сразу, без программирования формы.
Частое заблуждение: «выключили опцию — значит, данные защищены». Нет. Опция управляет только интерфейсом и составом прикладного решения на экране. Запрос, обработка или внешний отчёт по-прежнему прочитают и запишут скрытые данные. За доступ отвечают роли.
Суть механизма: чем опция отличается от прав доступа
Механизм решает одну задачу: одна конфигурация, разная функциональность. Небольшой фирме не нужны валютный учёт, склады и серии номенклатуры. Крупной нужны. Вместо двух версий программы разработчик ставит «выключатели», а пользователь сам решает, что ему показывать.
Как это устроено:
- 🔘 Хранилище — константа, реквизит справочника или ресурс регистра сведений. Там лежит значение опции.
- 📦 Состав — список объектов метаданных, которые опция включает и выключает.
- 🧩 Параметры — для опций, значение которых зависит от организации, склада или другого измерения.
Сравнение с ролями:
| Признак | Функциональная опция | Роль (права доступа) |
|---|---|---|
| На кого действует | На всех пользователей информационной базы (или в разрезе параметра) | На конкретного пользователя через его роли |
| Что делает | Убирает элементы из интерфейса | Разрешает или запрещает чтение, запись, проведение |
| Защищает данные | Нет | Да |
| Кто меняет | Обычно администратор в режиме «Предприятие» | Администратор в настройках пользователей или разработчик |
| Нужен ли Конфигуратор | Для создания — да, для переключения — нет | Для создания роли — да |
Хорошее правило: если вопрос звучит «нужна ли эта функция нашей фирме» — это опция. Если «можно ли этому сотруднику» — это роль.
Обе системы работают вместе. Пользователь увидит реквизит, только если опция включена и у него есть право на чтение. Выключенная опция скрывает элемент, даже если права полные.
Какими бывают функциональные опции
В свойствах объекта «Функциональная опция» есть поле Хранение. От него зависит тип опции.
Опция на константе
Самый частый вариант. Константа типа Булево, например ИспользоватьВалютныйУчет. Одно значение на всю базу. Включили — валютные реквизиты появились во всех документах.
Опция на реквизите справочника
Значение хранится в реквизите элемента справочника. Нужен параметр, который укажет, какой именно элемент смотреть. Пример: признак «Вести раздельный учёт» в карточке организации. Для одной организации опция включена, для другой выключена.
Опция на ресурсе регистра сведений
Значение лежит в ресурсе регистра, измерения регистра становятся параметрами. Удобно, когда признак зависит от пары «организация + склад» или от другой комбинации.
Тип значения
Для управления видимостью используют тип Булево. Опцию можно связать и с константой другого типа, но тогда она служит для чтения значения из кода, а на интерфейс в привычном смысле «показать/скрыть» не влияет.
Свойство «Привилегированный режим при получении»
Флаг в свойствах опции. Если он установлен, платформа читает значение опции без проверки прав на константу или справочник. Без него пользователь без права чтения константы получит значение по умолчанию и может не увидеть нужные поля. В типовых конфигурациях флаг обычно включён.
| Хранение | Параметры | Пример задачи |
|---|---|---|
| Константа | Не нужны | Валютный учёт, учёт по складам на всю базу |
| Реквизит справочника | Ссылка на элемент | Особенности учёта по каждой организации |
| Ресурс регистра сведений | Измерения регистра | Настройки по паре «организация + подразделение» |
Как создать опцию и настроить видимость полей и команд
Создание в Конфигураторе занимает пару минут. Пример — опция «Использовать проекты», которая прячет реквизит «Проект» в документах.
- Создайте константу
ИспользоватьПроектытипа Булево в веткеКонстанты. - Откройте ветку
Общие → Функциональные опции, добавьте новую. - Задайте имя, например
ИспользоватьПроекты, и синоним — его увидит разработчик в подсказках. - В поле Хранение выберите
Константа.ИспользоватьПроекты. - Откройте Состав и отметьте галочками: справочник «Проекты», реквизит «Проект» в нужных документах, реквизит в табличных частях, если он там есть.
- Установите флаг Привилегированный режим при получении.
- Обновите конфигурацию базы данных (
F7).
После этого при выключенной константе справочник «Проекты» исчезнет из меню, а поле «Проект» — из форм документов. Поле не нужно прятать вручную в каждой форме: платформа делает это сама для всех форм, где элемент связан с реквизитом из состава опции.
Что можно включить в состав
- 📄 объекты метаданных целиком: справочники, документы, отчёты, обработки, регистры;
- 🏷️ реквизиты объектов, табличные части и их реквизиты;
- 📊 измерения, ресурсы и реквизиты регистров;
- ⚙️ общие команды и команды объектов.
Реквизиты и команды формы
У реквизитов формы и команд формы есть собственное свойство Функциональные опции. Там выбирают одну или несколько опций. Это нужно для того, что не связано с метаданными напрямую: служебный реквизит формы, кнопка «Заполнить по проекту». Если выбраны несколько опций, элемент виден, когда включена хотя бы одна из них.
Свойство Видимость = Истина из кода не покажет элемент, скрытый выключенной опцией. Опция главнее. Если поле «не появляется, хотя видимость включена» — сначала проверьте опции.
Как спланировать набор опций до разработки
Ошибки в опциях дорого исправлять, когда база уже работает. Перед созданием ответьте себе на три вопроса:
- Какую бизнес-функцию включает опция? Имя должно читаться как вопрос «используем ли мы…»:
ИспользоватьПроекты,ИспользоватьСерииНоменклатуры. Имя по техническому признаку («ПоказыватьПоле5») через год никто не поймёт. - Зависит ли признак от организации или склада? Если да, сразу закладывайте хранение в справочнике или регистре с параметром. Переделывать константу в параметризованную опцию придётся вместе со всем кодом, который её читает.
- Можно ли выключить функцию, когда данные уже есть? Если нет, на форме настроек блокируйте флажок при наличии документов, как это сделано в типовых конфигурациях. Иначе пользователь спрячет реквизит с заполненными значениями и потеряет их из виду.
Как опции управляют разделами и подсистемами
Раздел интерфейса «Такси» — это подсистема верхнего уровня. Отдельно прятать его обычно не нужно. Если все объекты и команды подсистемы выключены опциями, раздел пустеет, и платформа не показывает его на панели разделов.
Пример. Подсистема «Производство» содержит документы выпуска, спецификации и отчёты. Все они входят в состав опции ИспользоватьПроизводство. Выключили константу — пропали и документы, и сам раздел «Производство».
Чтобы схема работала, соблюдайте два условия:
- В подсистеме не должно остаться объектов вне состава опции. Один забытый отчёт удержит раздел на экране.
- Общие команды, включённые в подсистему, тоже добавьте в состав опции или привяжите к ней.
Если раздел не исчезает, откройте подсистему в Конфигураторе, посмотрите её состав и сверьте с составом опции. Обычно причина — один объект, который забыли отметить.
Где пользователь переключает опции в типовых конфигурациях
В режиме «Предприятие» опции меняют через формы настроек. Флажки на этих формах — это константы, за которыми стоят функциональные опции.
| Конфигурация | Где включать функциональность |
|---|---|
| Бухгалтерия предприятия 3.0 | Главное → Настройки → Функциональность |
| ЗУП 3.1 | Настройка → Кадровый учёт, Настройка → Расчёт зарплаты |
| Управление торговлей 11 | НСИ и администрирование → Настройка НСИ и разделов |
В БП на форме «Функциональность» есть переключатель полной и выборочной функциональности. При выборочной открываются вкладки по разделам учёта. Флажок, который нельзя снять, обычно значит, что в базе уже есть данные по этому участку.
Программное управление и проверка условий
Значение опции читают из кода. Это нужно, когда интерфейсом дело не ограничивается: например, при проведении документа учитывать проекты, только если они включены.
Чтение простой опции
Если ПолучитьФункциональнуюОпцию("ИспользоватьПроекты") Тогда
Движение.Проект = Объект.Проект;
КонецЕсли;
Чтение опции с параметром
Для параметризованных опций сначала создают объект Общие → Параметры функциональных опций. В его свойстве Использование указывают, какие реквизиты или измерения он задаёт. Затем передают значение в структуре, ключ — имя параметра:
Параметры = Новый Структура("Организация", Объект.Организация);
РаздельныйУчет = ПолучитьФункциональнуюОпцию("ВестиРаздельныйУчет", Параметры);
Параметры для формы
Чтобы видимость полей в форме зависела от выбранной организации, параметр устанавливают самой форме:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьПараметрыФункциональныхОпцийФормы(
Новый Структура("Организация", Объект.Организация));
КонецПроцедуры
При смене организации в форме вызовите эту же процедуру ещё раз из серверного обработчика. Поля перестроятся под новую организацию.
Для всего интерфейса сеанса есть метод УстановитьПараметрыФункциональныхОпцийИнтерфейса(). Его применяют, когда пользователь работает с одной организацией и меню должно сразу соответствовать её настройкам.
Применить изменения без перезапуска
Пользователь снял флажок на форме настроек — интерфейс сам не перестроится. В типовых конфигурациях после записи константы на клиенте вызывают:
ОбновитьИнтерфейс();
Метод перерисовывает командный интерфейс и открытые формы с учётом новых значений.
Методы, которые стоит знать
| Метод | Где вызывать | Что делает |
|---|---|---|
ПолучитьФункциональнуюОпцию() | Сервер, клиент | Возвращает значение опции, при необходимости с параметрами |
ПолучитьФункциональнуюОпциюИнтерфейса() | Клиент | Значение с учётом параметров интерфейса сеанса |
ПолучитьФункциональнуюОпциюФормы() | Модуль формы | Значение с учётом параметров формы |
УстановитьПараметрыФункциональныхОпцийФормы() | Модуль формы | Задаёт параметры для этой формы |
ОбновитьИнтерфейс() | Клиент | Перестраивает интерфейс после изменений |
Частые ошибки при работе с опциями
- ❌ Опцию используют вместо прав. Поле скрыто, но внешняя обработка или отчёт с произвольным запросом по-прежнему покажет данные. Для ограничения доступа нужна роль или RLS.
- ❌ Одна опция на всё. Опция «Использовать расширенный учёт» с полусотней объектов в составе неудобна: пользователю нужна половина, а включить можно только всё сразу. Делите по смыслу.
- ❌ Опция выключена, а код работает так, будто она включена. Интерфейс скрыл реквизит, а проведение по-прежнему пишет его в движения пустым значением. Проверяйте опцию в коде проведения и отчётов.
- ❌ Нет флага привилегированного режима. У пользователей с урезанными ролями поля пропадают, у администратора — нет. Выглядит как плавающая ошибка.
- ❌ Правки в типовых опциях. Меняя состав типовой опции прямо в конфигурации поставщика, вы снимаете её с полной поддержки и усложняете обновления. Свою опцию и её состав лучше вынести в расширение, если позволяет версия платформы.