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