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