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