Как найти функциональную опцию, которая скрывает реквизит на форме 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разберем одну из самых коварных проблем в разработке на платформе 1С:Предприятие 8.3: ситуацию, когда реквизит на управляемой форме отсутствует, хотя в программном коде свойство Видимость установлено в значение Истина. Это происходит потому, что функциональные опции (ФО) имеют наивысший приоритет над свойствами элементов формы. Если ФО отключена, платформа просто не передает элемент на клиентскую сторону, и никакие манипуляции с Элементы.ИмяРеквизита.Видимость не помогут.

Рассмотрим пошагово, как локализовать источник проблемы и выявить ту самую функциональную опцию, которая «съела» ваш реквизит.

1. Проверка свойств реквизита в дереве метаданных

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

  1. Найдем нужный реквизит в дереве метаданных (например, в документе или справочнике).
  2. Нажмем правую кнопку мыши и выберем пункт Дополнительно.
  3. Перейдем на закладку Функциональные опции.

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

2. Использование замера производительности для поиска программного кода

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

Выполним следующие действия:

  1. Запустим замер производительности в конфигураторе непосредственно перед открытием проблемной формы.
  2. Откроем форму в режиме «Предприятие».
  3. Остановим замер.
  4. В окне замера выполним поиск (Ctrl+F) по ключевым словам УстановитьПараметрыФункциональныхОпцийФормы или ПрименитьПараметрыФункциональныхОпций.

Если мы нашли вызов этих процедур, проанализируем передаваемые в них параметры. Часто в типовых конфигурациях (ERP, КА, УТ) управление видимостью запрятано глубоко в общих модулях БСП. Наличие строки в замере подтвердит, что код выполнялся, и мы сможем перейти к конкретной процедуре для анализа логики.

3. Диагностика через «Табло» и вычисление выражений

Посмотрим на ситуацию «глазами системы» в момент работы формы. Остановимся отладчиком в процедуре ПриОткрытии или ПриСозданииНаСервере и проверим текущее состояние опций.

В окне Вычислить выражение или в Табло проверим следующие значения:


// Проверим параметры ФО, действующие для данной формы
ЭтаФорма.ПараметрыФункциональныхОпций

// Проверим конкретное значение интересующей нас опции
ПолучитьФункциональнуюОпцию("ИмяВашейФункциональнойОпции")

Если ПолучитьФункциональнуюОпцию возвращает Ложь, значит, именно это блокирует отображение элемента. Если же вы подозреваете, что ФО зависит от параметров (например, от Организации или Склада), можно проверить её с передачей структуры параметров:


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

4. Поиск «от обратного» через состав Функциональной опции

Если мы не знаем, какая именно ФО влияет на реквизит, пойдем от списка всех опций. Рассмотрим этот метод как наиболее надежный:

  1. В дереве конфигурации перейдем в ветку Общие -> Функциональные опции.
  2. Если конфигурация большая (как ERP), используем глобальный поиск по названию реквизита, но ищем не ссылки, а вхождения в состав ФО.
  3. Для каждой подозрительной ФО откроем окно Состав. В этом окне наглядно отображается дерево всех объектов метаданных. Если наш реквизит отмечен галочкой в составе ФО — мы нашли виновника.

5. Проверка пользовательской видимости и прав доступа

Проанализируем ситуацию, когда ФО включена, но реквизита всё равно нет. Важно помнить о приоритетах:

  1. Права доступа (RLS и обычные права): Если у пользователя нет прав на чтение (R) конкретного реквизита, он не появится на форме, даже если ФО включена. Проверим роль пользователя.
  2. Пользовательская видимость: В редакторе формы выберем элемент и нажмем Проверить видимость или зайдем в свойства элемента -> Пользовательская видимость. Возможно, галочка снята для конкретной роли.
  3. Настройка формы пользователем: В режиме «Предприятие» зайдем в меню Еще -> Изменить форму. Если реквизит есть в списке, но галочка снята — это ручная настройка пользователя. Если реквизита нет в списке вообще — это либо ФО, либо отсутствие прав доступа.

6. Влияние расширений конфигурации

Выясним, не вносит ли смуту расширение. Если основная конфигурация чиста, проверим:

Итог диагностики

Подведем итог: если Видимость = Истина, но поля нет — это всегда либо работа функциональной опции, либо ограничение прав доступа. Самый быстрый способ диагностики в типовых решениях — это поиск реквизита в Составе всех функциональных опций и проверка регистра сведений ПараметрыФункциональныхОпций (если используется БСП), где могут храниться индивидуальные настройки параметров ФО для разных узлов или организаций.

← На главную