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

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

Параметры функциональных опций в 1С: что это и как ими управлять

Разбираемся, что такое параметры функциональных опций в 1С, зачем они нужны, как настроить их в конфигураторе и использовать в коде. Примеры, ошибки, FAQ.

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

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

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

Что такое функциональные опции и зачем им параметры

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

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

Где хранятся значения опций с параметрами

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

Например, в типовых конфигурациях настройки по организациям хранятся в регистре «Настройки учёта»-подобных структурах, а по складам — в регистрах с измерением «Склад». Именно регистр сведений указывается в свойстве «Хранение» функциональной опции, а параметр связывается с измерением регистра.

  • Без параметра: константа, одно значение на всю базу.
  • С параметром: регистр сведений, значение для каждого объекта измерения отдельно.
  • Смешанный вариант: опция может иметь несколько параметров, но чаще используется один — лишние параметры усложняют логику получения значений.

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

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

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

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

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

Для чтения значения используется функция встроенного языка ПолучитьФункциональнуюОпцию(). Когда у опции есть параметр, его значение передаётся вторым аргументом в виде структуры, где ключ — имя параметра.

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

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

В запросах значение опции с параметром обычно получают не через функциональную опцию напрямую, а соединением с регистром сведений, где хранятся значения. Это эффективнее при обработке больших выборок, чем вызов функции в цикле.

Типичные ошибки
01
Вызов ПолучитьФункциональнуюОпцию без параметра — возвращается обобщённое значение, логика работает неверно для конкретного объекта.
02
Несовпадение типа параметра и типа измерения регистра — опция всегда возвращает Ложь или значение по умолчанию.
03
Получение опции в цикле по строкам таблицы — резкое падение производительности; значение лучше получить один раз до цикла или через запрос.
04
Заполнение регистра не для всех объектов — для объектов без записи опция считается выключенной, что неожиданно для пользователей.

Как параметры влияют на интерфейс и права

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

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

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

После настройки обязательно проверьте поведение на реальных данных. Проверка занимает несколько минут и избавляет от ошибок в продуктивной базе.

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

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

Запись в регистре сведений
Норма

Для тестового объекта есть запись с нужным значением ресурса

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

Записи нет — опция вернёт Ложь независимо от настроек

Вызов функции в коде
Норма

При передаче параметра с объектом возвращается значение из регистра

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

Возвращается одно и то же значение для любых объектов — параметр не связан с измерением

Интерфейс
Норма

При открытии объектов с разными настройками элементы формы показываются/скрываются корректно

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

Видимость не меняется — требуется программное управление в обработчиках формы

Когда параметр не нужен: критерии выбора

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

Маршрут решения

Как выбрать действие

Настройка едина для всей информационной базыИспользуйте опцию без параметра, значение — в константе
Настройка различается по организациям, складам или подразделениямСоздайте параметр опции и регистр сведений с измерением соответствующего типа
Настройка зависит от пользователя или датыФункциональная опция не подходит — используйте регистр сведений с прямым обращением в коде
Нужно скрыть данные, а не функциональностьИспользуйте роли и RLS вместо функциональных опций

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

Итог

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

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

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

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

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

Можно ли у одной опции быть несколько параметров?

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

Как получить значение опции с параметром в запросе?

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

Почему опция с параметром всегда возвращает Ложь?

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

Можно ли добавить функциональную опцию через расширение конфигурации?

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

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

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