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