Разработка и Конфигурация · 10 мин
Функциональные опции 1С: как создать и настроить
Пошаговая инструкция по созданию функциональных опций в 1С: константы, хранение значений, привязка объектов, управление интерфейсом и типичные ошибки разработчика.
Функциональные опции в 1С — это механизм, который позволяет включать и отключать части функциональности конфигурации без изменения её кода. С помощью опций можно скрывать объекты метаданных из интерфейса, управлять доступностью команд и гибко адаптировать одну конфигурацию под разные сценарии внедрения: например, показывать складской учёт только там, где он реально используется.
Механизм работает одинаково в типовых конфигурациях и в собственных разработках на управляемых формах. Разработчик создаёт опцию в конфигураторе, привязывает к ней место хранения значения (обычно константу) и указывает, какие объекты зависят от её состояния. Дальше платформа сама решает, показывать ли пользователю соответствующие разделы, документы и отчёты.
Ниже разобран полный цикл работы с функциональными опциями: от проектирования и создания до проверки результата и типичных ошибок, которые приводят к «исчезнувшим» объектам в интерфейсе.
Когда стоит использовать функциональные опции
Функциональные опции оправданы, когда конфигурация должна работать в нескольких режимах. Классический пример — учётная программа, в которой торговый учёт, производство и зарплата нужны не всем клиентам. Вместо трёх отдельных конфигураций создаётся одна, а лишние разделы выключаются опциями.
Вторая типичная ситуация — постепенное внедрение. Компания может начать с простого учёта, а затем включать дополнительные механизмы по мере готовности. Опция позволяет сделать это настройкой, а не доработкой.
Не стоит использовать опции для разграничения прав доступа — для этого существуют роли. Опция отключает функциональность для всей информационной базы или её части, тогда как роли ограничивают конкретных пользователей. Смешивание этих механизмов приводит к путанице в настройках.
Хранение значений опции: константы и другие варианты
Значение опции нужно где-то хранить. Самый распространённый способ — константа с типом «Булево»: истина означает, что функциональность включена. Константа создаётся в ветке «Константы» дерева конфигурации, а затем указывается в свойстве «Хранение» функциональной опции.
Кроме констант, значение можно хранить в реквизите справочника — это полезно, когда функциональность включается не глобально, а в разрезе организаций или подразделений. Также существуют параметризуемые функциональные опции, где в качестве параметра выступает, например, ссылка на склад, и один и тот же объект может быть доступен для одних складов и скрыт для других.
| Способ хранения | Когда применять | Ограничение |
|---|---|---|
| Константа (Булево) | Глобальное включение функции для всей базы | Одно значение на всю информационную базу |
| Реквизит справочника | Настройка в разрезе организаций, складов | Требуется параметризуемая опция |
| Без хранения | Опция, вычисляемая от других опций | Нельзя редактировать напрямую |
Сравнение вариантов
Подходит для простых глобальных настроек: валютный учёт, многоскладской учёт. Ограничение — одно значение на всю базу.
Подходит, когда функция включается для отдельных организаций или складов. Ограничение — сложнее в настройке и отладке.
Подходит для производных настроек, зависящих от других опций. Нельзя изменить вручную в пользовательском режиме.
Пошаговое создание функциональной опции в конфигураторе
Процесс создания занимает несколько минут, если хранилище значения уже подготовлено. Все действия выполняются в конфигураторе с правами на изменение конфигурации.
- 1Создайте константу с типом «Булево», например «ВестиУчетПоСкладам», и задайте ей понятное представление.
- 2В ветке «Общие» → «Функциональные опции» добавьте новую опцию и дайте ей имя, отражающее смысл функциональности.
- 3В свойстве «Хранение» укажите созданную константу.
- 4В свойстве «Состав» отметьте флажками объекты метаданных (справочники, документы, отчёты, команды), которые должны зависеть от опции.
- 5При необходимости добавьте в состав опции соответствующие подсистемы, чтобы разделы скрывались из панели разделов.
- 6Обновите конфигурацию базы данных (F7) и проверьте поведение в режиме предприятия.
Важный нюанс: в состав опции можно включать не только сами объекты, но и отдельные их элементы — реквизиты, табличные части, команды форм. Это позволяет, например, скрывать одно поле в документе, не отключая документ целиком.
Если опция должна зависеть от другой опции (например, «Расширенный складской учёт» имеет смысл только при включённом «Учёте по складам»), используйте свойство «Привилегированный режим» и программную установку значений, либо контролируйте логику в форме настроек. Платформа сама не запрещает противоречивые комбинации значений.
Управление интерфейсом и отображением объектов
После привязки объектов к опции платформа автоматически скрывает их из командного интерфейса, когда значение опции равно «Ложь». Пользователь не увидит ни ссылку на справочник в панели навигации, ни команду создания документа, ни отчёт в списке отчётов раздела.
Обратите внимание: скрытие из интерфейса не означает удаления данных. Если в базе уже есть документы, введённые при включённой опции, после её отключения они останутся в базе и будут доступны, например, через поиск или программно. Это нужно учитывать при проектировании, чтобы не потерять доступ к историческим данным.
Для программной проверки состояния опции в коде используется функция ПолучитьФункциональнуюОпцию("ИмяОпции"). Она возвращает текущее значение и позволяет строить условную логику в модулях — например, не выполнять расчёт себестоимости, если соответствующий учёт отключён.
Если ПолучитьФункциональнуюОпцию("ВестиУчетПоСкладам") Тогда
// логика складского учёта
КонецЕсли;Проверка результата после настройки
После обновления конфигурации базы данных обязательно проверьте опцию в обоих состояниях. Включите константу, перезапустите сеанс (или обновите интерфейс) и убедитесь, что объекты появились. Затем выключите и убедитесь, что они исчезли из панели разделов, списков и меню создания.
Как проверить результат
При включённой опции объекты видны, при выключенной — скрыты
Объекты видны всегда или не видны никогда
Константа сохраняется и читается в пользовательском режиме
Значение сбрасывается или недоступно для редактирования
ПолучитьФункциональнуюОпцию возвращает актуальное значение
Функция возвращает устаревшее значение до перезапуска сеанса
Документы, введённые ранее, открываются и проводятся корректно
После отключения опции старые документы недоступны
Если объекты не скрываются, чаще всего причина в том, что объект не добавлен в состав опции, либо команда объекта размещена в интерфейсе вручную вне зависимости от настроек подсистемы. Проверьте также, не переопределена ли видимость в коде формы или в настройках командного интерфейса подсистемы.
Типичные ошибки и ограничения механизма
Ещё одно ограничение: функциональные опции влияют на интерфейс и доступность команд, но не удаляют объекты из конфигурации. Запросы и код, обращающиеся к «отключённым» объектам напрямую, продолжат работать. Если требуется полное исключение функциональности, условия нужно дублировать в коде через ПолучитьФункциональнуюОпцию.
Часто задаваемые вопросы
Можно ли создать функциональную опцию без программирования?
Да, создание опции, константы и привязка объектов выполняются полностью в конфигураторе через свойства объектов, без написания кода. Код понадобится только для программной проверки значения опции в модулях или для сложной логики взаимосвязанных настроек.
Почему объект не скрывается, хотя опция выключена?
Проверьте три вещи: добавлен ли объект в состав опции, обновлена ли конфигурация базы данных после изменений и не переопределена ли видимость команды в настройках командного интерфейса подсистемы или в коде формы. Также помогает перезапуск сеанса — интерфейс может кэшировать старое состояние.
Что произойдёт с данными при отключении опции?
Данные физически сохранятся в базе, но связанные объекты исчезнут из интерфейса. Документы перестанут отображаться в журналах, однако останутся доступны программно и через полнотекстовый поиск. Перед отключением опции в рабочей базе обязательно оцените, как пользователи получат доступ к историческим данным.
Чем функциональная опция отличается от роли?
Опция включает или отключает функциональность для всей базы (или её части при параметризации) и управляет видимостью объектов в интерфейсе. Роль определяет права конкретных пользователей на чтение, запись и использование объектов. Эти механизмы дополняют друг друга, но не заменяют.
Можно ли сделать опцию, зависящую от другой опции?
Да, но платформа не контролирует согласованность значений автоматически. Логику зависимостей реализуют в форме настроек (при изменении одной опции корректируются связанные) или программно при записи констант. Альтернатива — опция без собственного хранения, значение которой вычисляется от других.
Работают ли функциональные опции в обычных формах?
Механизм функциональных опций ориентирован на управляемые формы и командный интерфейс такси. В конфигурациях на обычных формах он практически не применяется — там видимость элементов управляется кодом форм и настройками интерфейса вручную.
Что важно запомнить
Функциональная опция создаётся в три шага: константа для хранения значения, сама опция с указанием хранения, заполнение состава зависимых объектов. Опции управляют видимостью, но не удаляют данные и не заменяют роли. Перед отключением опции в рабочей базе проверяйте наличие введённых данных и делайте резервную копию.